TCP服务器端代码:

 1 // TcpSrv.cpp: 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include<Windows.h>
 6 #pragma comment(lib,"ws2_32.lib") 
 7 
 8 int main()
 9 {
10     //************加载套接字库*****************
11     WORD wVersionRequested;
12     WSADATA wsaData;
13     int err;
14 
15     wVersionRequested = MAKEWORD(2,2);//Winsock库版本,低字节代表主版本,高字节代表副版本
16     err = WSAStartup(wVersionRequested, &wsaData);
17     if (err != 0)
18     {
19         return false;
20     }
21     if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
22     {
23         WSACleanup();//终止对winsock库的使用
24         return false;
25     }
26 
27     //***********创建套接字********************
28 
29     //parameter int af:指定协议族,即网际域,Windows平台总是AF_INET或TF_INET
30     //parameter int type:套接字类型
31     //parameter int protocal:协议类型,一般设为0,自动设置
32     SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0);
33 
34     //************绑定到本机地址和端口***********
35     SOCKADDR_IN addrSrv;//本机地址结构体信息,除了sin_family,其它字段都需要采用网络字节序
36     addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//htonl转换为网络字节序,转换的是u_long类型
37     addrSrv.sin_family = AF_INET;
38     addrSrv.sin_port = htons(6000);//htons转换为网络字节序,转换的是u_short类型
39 
40     //绑定,由于第二个参数会随网络协议的不同而变化,所以第三个参数指定地址结构的长度
41     bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(addrSrv));
42 
43     //*************监听************************
44     listen(sockSrv,5);//5表示连接队列
45 
46     while (1)
47     {
48         SOCKADDR_IN addrClient;//用于接收客户端的地址信息
49         int len = sizeof(SOCKADDR);//这个参数必须初始化
50 
51         //*************建立连接************************
52         //接受客户端的连接,返回一个新的套接字。之前的套接字sockSrv依然用于监听
53         SOCKET sockConn = accept(sockSrv,(SOCKADDR*)&addrClient,&len);
54 
55         //*************发送数据************************
56         char sendBuf[100];
57         //inet_ntoa表示将网络用的ip地址转换为点分十进制的形式,并返回成字符串  
58         //inet_addr将点分十进制地址转换为一个无符号整形表示形式
59         sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));
60 
61         send(sockConn, sendBuf, strlen(sendBuf) + 1,0);
62 
63         //*************接收数据************************
64         char recvBuf[100];
65         recv(sockConn,recvBuf,100,0);
66         printf("%s",recvBuf);
67 
68         //*************关闭套接字**********************
69         closesocket(sockConn);
70     }
71     // 退出while循环后,关闭sockSrv以及清理套接字即可
72 
73     return 0;
74 }
View Code

相关文章: