管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。3 ~+ _" z0 A4 \
我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。
& ^- i' z) x, b# d- zTalk is cheak , show me the code.6 N0 K/ I2 a( A" {+ C
服务端代码:
; }2 g* g8 }! u6 D8 S& b- #include<stdlib.h>% I7 A& l4 H$ M6 G% @/ z) I8 |2 K
- #include<WinSock2.h>
/ ^7 X9 Y7 r+ E7 u+ r - #pragma comment(lib,"ws2_32.lib")8 E9 |% i1 V% l# y1 P$ y* Y
- int main(){4 T' C n S, y
- WSADATA wsd;# {6 S0 S, q ]+ l0 G
- SOCKET sockServer;$ w2 @& I& j3 J& Y( w0 p2 Y
- SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号; @. p4 |/ m7 r5 R9 h
- SOCKET sockClient;
C' C3 `4 @8 @3 ?" V - SOCKADDR_IN clientaddr;! ~) H( Y; }3 g/ U
- WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口
2 E4 P6 k8 {) ?0 Y% P) n - sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket
s& y7 u! V4 R2 r
# f2 W- @, U7 R: ~" I: a5 x- 4 j. J/ u- e Q k7 Z" F) c3 k, D
- if (sockServer != -1 && sockServer != INVALID_SOCKET){
$ n0 `# G' O6 ^5 Q% [1 j$ Z - printf("Socket has been created :%d", sockServer);" r/ [& u5 P9 s
- }5 ]# I4 s" A" u* t
- else{
3 H8 k; P6 g6 t8 ~- l( _$ @ - printf("Socket create failed.");
9 H/ \& Q& W/ A% J- g) j \9 M - exit(0);) \' u0 r0 p) N1 |
- }# z F' o4 I9 }* d& T
- serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);: K; A4 L5 W0 M7 r% f2 K% t8 s
- serveraddr.sin_family = AF_INET;1 {" L3 |9 y1 N- Z
- serveraddr.sin_port = htons(6000);//绑定端口6000
6 f- w) r$ I/ k+ e2 [2 J2 A - int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));, U# h- G0 F2 w5 r, o
- char recvBuf[100];
" G, f; I0 g, ~* M: E: F$ } - int len = sizeof(SOCKADDR);$ |. \- |9 g% H& s
- listen(sockServer, 5);//5为等待连接数# d3 t) n6 h# ~: a0 L
- while (1){0 x" @1 ^3 Q- ^1 c& _
- sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);
3 d' a6 {6 V+ \% x - //接收客户端数据
' @4 ^: o' Y5 M4 L+ K: L - recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);- G' i5 y+ o: _/ f
- printf("to me:%s\n",recvBuf);
/ U3 K/ O+ @" H$ A" R2 E5 E - memset(recvBuf, 0, 100);. d% ~# y: c4 @% _
- }
1 k- B7 v# | Y2 a" l% w: U" T; l9 B - closesocket(sockClient);
. A7 k" R& Q) q8 ?- \& @ - system("pause"); K4 e1 o1 m* K, K1 N% a
- return 0;/ T9 U7 R2 n' ^1 j4 F2 U. T
- }
复制代码 客户端代码:
: `5 O; \; g/ O7 O. o2 Y0 A+ C% `; O- #include<winsock2.h>
5 L6 [) W: d1 U4 c - #include<stdio.h> s! z- l/ `6 n0 E3 O( k6 |2 i
- #pragma comment(lib, "ws2_32.lib")$ f8 Q p& D8 p* \
- void main()7 L+ s0 N9 {/ ]1 c. j* e1 V0 s
- {
3 H" ^/ g; |& z6 X0 S - WSADATA wsaData;
- n# ?$ ~7 ~9 J6 }$ n l1 N; k - SOCKET sockClient;//客户端Socket4 Z ^) Y/ H% V
- SOCKADDR_IN addrServer;//服务端地址
5 r, r6 V d7 O% f - WSAStartup(MAKEWORD(2, 2), &wsaData);) `' Y. b) @6 Q
- char message[20] = "HelloSocket!";
: i$ J# e6 v( h - //定义要连接的服务端地址, t( @ f+ { i: E8 d }
- addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)
. h7 \ i! ?8 L+ Q: N# L - addrServer.sin_family = AF_INET;
; H/ d) W2 M/ s, @ - addrServer.sin_port = htons(6000);//连接端口60002 i) f3 K; ?: N$ w0 k) Z: j- g( m2 @
- //新建客户端socket
$ s, w5 t( J3 }- c% n6 r - sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);! [7 b! ]8 s+ O
- int s = 0;2 J5 J0 P/ k4 H6 S, I7 L: s6 n( w- T
- s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
/ m% G7 L' \: M7 `9 H* K! w% A - ' Z) V3 T; b+ r/ ]
- while (1){
3 D( d% }$ U# S S - //发送数据( V( ^! B' s% h# V; R; q
- int a = send(sockClient, message, strlen(message) + 1, 0);
! ?# j/ z1 n, j* J6 A - printf("to server:");- c- O m+ G7 }3 T* |
- scanf("%s", message);
6 \$ N3 g. i% E - , C; R* Y' v- J% Q+ k! `; A) o7 B
- }" V" ]; @" @+ h$ b/ P- d) x
- //关闭socket* e/ H" P4 w7 {8 p* \7 E& @7 p% r
- closesocket(sockClient);
. u4 z+ J! Q, O' Q - WSACleanup();
; ], g; R: x) A% c- ~ - }
复制代码 求懂的高手来解答一下。
2 }3 h9 D5 W& O, @谢谢了!9 a& A2 |3 M# ^
9 k. A+ i* y5 c2 l
+ d. e# `$ e! o; u7 X
( ~8 f1 W, q" o. e5 N# L. u |
|