01 | server端: |
02 | |
03 | #include <WINSOCK2.H> |
04 | #include <stdio.h> |
05 | #pragma comment(lib,"ws2_32.lib") |
06 | void main() |
07 | { |
08 | //创建套接字 |
09 | WORD myVersionRequest; |
10 | WSADATA wsaData; |
11 | myVersionRequest=MAKEWORD(1,1); |
12 | int err; |
13 | err=WSAStartup(myVersionRequest,&wsaData); |
14 | if (!err) |
15 | { |
16 | printf ( "已打开套接字/n" ); |
17 | } |
18 | else |
19 | { |
20 | //进一步绑定套接字 |
21 | printf ( "嵌套字未打开!" ); |
22 | return ; |
23 | } |
24 | SOCKET serSocket=socket(AF_INET,SOCK_STREAM,0); //创建了可识别套接字 |
25 | //需要绑定的参数 |
26 | SOCKADDR_IN addr; |
27 | addr.sin_family=AF_INET; |
28 | addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY); //ip地址 |
29 | addr.sin_port=htons(6000); //绑定端口 |
30 | |
31 | bind(serSocket,(SOCKADDR*)&addr, sizeof (SOCKADDR)); //绑定完成 |
32 | listen(serSocket,5); //其中第二个参数代表能够接收的最多的连接数 |
33 | |
34 | // |
35 | //开始进行监听 |
36 | // |
37 | SOCKADDR_IN clientsocket; |
38 | int len= sizeof (SOCKADDR); |
39 | while (1) |
40 | { |
41 | SOCKET serConn=accept(serSocket,(SOCKADDR*)&clientsocket,&len); //如果这里不是accept而是conection的话。。就会不断的监听 |
42 | char sendBuf[100]; |
43 | |
44 | sprintf (sendBuf, "welcome %s to bejing" ,inet_ntoa(clientsocket.sin_addr)); //找对对应的IP并且将这行字打印到那里 |
45 | send(serConn,sendBuf, strlen (sendBuf)+1,0); |
46 | char receiveBuf[100]; //接收 |
47 | recv(serConn,receiveBuf, strlen (receiveBuf)+1,0); |
48 | printf ( "%s/n" ,receiveBuf); |
49 | closesocket(serConn); //关闭 |
50 | WSACleanup(); //释放资源的操作 |
51 | } |
52 | } |
53 | |
54 | |
55 | |
56 | client端: |
57 | |
58 |
59 | #include <WINSOCK2.H> |
60 | #include <stdio.h> |
61 | #pragma comment(lib,"ws2_32.lib") |
62 | void main() |
63 | { |
64 | int err; |
65 | WORD versionRequired; |
66 | WSADATA wsaData; |
67 | versionRequired=MAKEWORD(1,1); |
68 | err=WSAStartup(versionRequired,&wsaData); //协议库的版本信息 |
69 | if (!err) |
70 | { |
71 | printf ( "客户端嵌套字已经打开!/n" ); |
72 | } |
73 | else |
74 | { |
75 | printf ( "客户端的嵌套字打开失败!/n" ); |
76 | return ; //结束 |
77 | } |
78 | SOCKET clientSocket=socket(AF_INET,SOCK_STREAM,0); |
79 | SOCKADDR_IN clientsock_in; |
80 | clientsock_in.sin_addr.S_un.S_addr=inet_addr( "127.0.0.1" ); |
81 | clientsock_in.sin_family=AF_INET; |
82 | clientsock_in.sin_port=htons(6000); |
83 | //bind(clientSocket,(SOCKADDR*)&clientsock_in,strlen(SOCKADDR));//注意第三个参数 |
84 | //listen(clientSocket,5); |
85 | connect(clientSocket,(SOCKADDR*)&clientsock_in, sizeof (SOCKADDR)); //开始连接 |
86 | char receiveBuf[100]; |
87 | recv(clientSocket,receiveBuf,101,0); |
88 | printf ( "%s/n" ,receiveBuf); |
89 | send(clientSocket, "hello,this is client" , strlen ( "hello,this is client" )+1,0); |
90 | closesocket(clientSocket); |
91 | WSACleanup(); |
92 | } |