大家好,感谢你的回复。* M+ W! G3 l6 Q& W- P! t
我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。' o7 X% Z2 e1 }& F& e
Talk is cheak , show me the code.* P- z' h K, [: h6 B
服务端代码:5 U; ~& H4 C; q7 k+ _# t9 u# N
- #include<stdlib.h>
. V0 B" |* P4 O7 Y7 \# r2 c - #include<WinSock2.h>1 j6 P; o6 T7 K6 Q; T, q
- #pragma comment(lib,"ws2_32.lib")
! f) a# Y0 \) b, c d6 Y - int main(){
" V* p4 Z' @6 g$ d - WSADATA wsd;
^' F( {$ @1 I1 n7 G - SOCKET sockServer;; z- ^! a i) f, K# M- U
- SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号
3 s* G h0 T! t - SOCKET sockClient;
" F E$ u3 O i1 w9 {' {. T# { - SOCKADDR_IN clientaddr;) g/ e2 |5 W0 g* |
- WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口
; x9 _$ c1 V" i/ T- ?. b - sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket# b2 s2 s. d5 i
* q4 b4 f$ a7 D7 F: c
) F$ t8 o7 P X, ]3 T5 S+ i0 H) o- if (sockServer != -1 && sockServer != INVALID_SOCKET){; N' b7 U% \4 [# x+ }
- printf("Socket has been created :%d", sockServer);
2 @$ U$ Z$ D' `4 j8 ^) m5 f/ k - }$ @" G0 b" u7 E4 L
- else{
& r1 g* m2 d ?2 [0 j - printf("Socket create failed.");8 d$ h# {8 e$ {) S) y" e5 C
- exit(0);
% U1 Q$ H% h, f# d U) c, M - }# C- h3 V) I6 d6 f& I5 w; J
- serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);* K0 Y5 e) ], W8 g
- serveraddr.sin_family = AF_INET;
5 ^3 n0 B; |! Z - serveraddr.sin_port = htons(6000);//绑定端口6000' g' V! [: O) g o& {
- int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));2 j3 U7 B% E+ P7 P
- char recvBuf[100];' O- f9 [' S, {1 W
- int len = sizeof(SOCKADDR);9 x* C+ ?+ C) M% u0 J
- listen(sockServer, 5);//5为等待连接数
6 X$ ]% C; ?2 s6 P5 c) Z - while (1){
9 K7 S @) Y( ^( K6 E - sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);
- i6 V5 J& g: |- U6 N& v5 e - //接收客户端数据
4 _/ F. I- O+ o/ q' ` - recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);4 l! \' l2 n3 P4 y/ f2 J
- printf("to me:%s\n",recvBuf);; {6 X8 d2 J& N, j0 j+ G/ K
- memset(recvBuf, 0, 100);
8 g5 E! w, Z% V: m& T3 S - }
7 Q' n1 _1 p8 [6 c9 i3 @9 Q* X" Q - closesocket(sockClient);
) M+ d: U0 n8 r: j& z- B* | - system("pause");
% z3 M1 n3 `3 A+ ~ - return 0;
8 n3 t! e3 r6 p6 x+ ]4 Y3 P - }
复制代码 客户端代码:1 ]& E" [( u% u! D, y
- #include<winsock2.h>
/ j1 }- Q* R8 y5 w - #include<stdio.h>
1 U0 C1 d7 ~6 k6 I5 @ - #pragma comment(lib, "ws2_32.lib")
( ~& @3 [6 F0 _( z3 k, ^* w: r" k/ h - void main()
6 w) x( ?6 y. i2 F6 V4 K - {. Q8 }+ g# g8 }5 M
- WSADATA wsaData;; A. q5 A M6 x9 b, b' }! ^; A
- SOCKET sockClient;//客户端Socket
4 U$ n5 D# n6 G( P - SOCKADDR_IN addrServer;//服务端地址& P9 ?( b5 z8 ?7 C! S5 S, w4 P e
- WSAStartup(MAKEWORD(2, 2), &wsaData);
! M, A: j8 O# ? `6 U/ C - char message[20] = "HelloSocket!";
8 }- j, R4 y& o! ] - //定义要连接的服务端地址5 }% {+ T6 e, C" J t. P3 T
- addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)
: N8 u. [: c3 d - addrServer.sin_family = AF_INET; o1 n9 A* [+ Z1 K
- addrServer.sin_port = htons(6000);//连接端口6000$ I# m, m8 h& }, G
- //新建客户端socket/ k; h1 V7 t5 D$ i7 r
- sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
2 t4 M- u! M7 i! X - int s = 0;
4 k7 Q7 t' i, u. r( L - s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));8 F8 P0 }+ ^, P2 q
- * V- O* U5 j1 F6 b& b. \
- while (1){- t4 [0 r6 s8 g5 P' m& ]- G
- //发送数据
. d& y5 f) W6 q+ W$ m5 \( S" d - int a = send(sockClient, message, strlen(message) + 1, 0);0 }% D# z& | z# _' h% _/ ^
- printf("to server:");
* x4 ~( N5 M3 I/ `6 h6 B - scanf("%s", message);: R* G! v% V& P- t( j& T
# ?# z: u& o: G3 y* w$ g# g1 W- }6 ~" q; L9 K& c. Q) s" V1 H" t2 w
- //关闭socket
/ w# ]3 ]1 l1 r% y4 ?2 i) y* I2 s" C$ f - closesocket(sockClient);0 C; ]# o0 }; ?$ q
- WSACleanup();
8 s# z& y. H; u, j+ x# H. s - }
复制代码 求懂的高手来解答一下。/ {, O7 ^6 j8 H9 J8 b4 ~
谢谢了!
% X; e. _$ J: ^1 M. z
/ S8 s$ X0 W0 g6 ~1 i" y2 j+ ]! z F5 a; |( c" M
/ |& o6 q, \; t+ B; S
|
|