管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。
* ^, S. J v4 X+ m我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。
- f; i) ?! j1 Q3 \& _/ fTalk is cheak , show me the code.
* P: _2 k9 l* z1 T# K7 {服务端代码:- a3 _3 S% E/ {2 A
- #include<stdlib.h>6 D* P0 Z& X9 @9 ^0 }3 K( ] ?
- #include<WinSock2.h>* n* D- b- |) g) h% {" l
- #pragma comment(lib,"ws2_32.lib") C8 q* o$ A; k) Y0 x
- int main(){1 G! m% [9 @' Q
- WSADATA wsd;
7 w& r b4 }; J$ p/ I4 }# J5 H - SOCKET sockServer;! m! M0 a% D3 ?5 S
- SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号
i, Q6 @, l2 f8 O% k4 ?8 r$ h5 V - SOCKET sockClient;
$ d. _* j0 r/ R S - SOCKADDR_IN clientaddr;+ H) b" q0 G1 b: s! c0 T/ ^
- WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口6 t& }4 r) R. [9 Q/ L
- sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket1 r0 O& W& v3 T5 x5 b! k) K$ K' |
: b8 w$ K W# O0 j9 I& J9 a5 P- @) i; z5 }9 `$ `; |! c
- if (sockServer != -1 && sockServer != INVALID_SOCKET){/ M: ~1 F/ a$ D4 J' M- E1 k
- printf("Socket has been created :%d", sockServer);$ @) _$ U" M& W$ ?
- }4 O; |) t: a: c" s( n
- else{0 R/ g/ K% V; d$ @, @3 D
- printf("Socket create failed.");
+ j2 S: t$ A% H% u0 P3 d - exit(0);
& R1 ~% F& f3 @& y# p* T - }9 X: P: Z0 s+ Z5 M% G# d
- serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);1 _/ D1 J. i m; S- I# o* a
- serveraddr.sin_family = AF_INET;2 W9 B" ~2 [2 _
- serveraddr.sin_port = htons(6000);//绑定端口60000 a$ x/ E6 a' n9 c
- int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
& z) x, o2 b) ] g: l - char recvBuf[100];( x! N* s; ~2 q7 ^2 s
- int len = sizeof(SOCKADDR);
" L( w! U! x3 W - listen(sockServer, 5);//5为等待连接数
7 r( f: ^1 Z. w - while (1){
+ a$ Z+ x; w( P& ^4 V) t, V7 I' c( _. R - sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);* S' B" V9 G* U0 p- a
- //接收客户端数据
3 z e2 ?$ w4 z1 y - recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);8 q0 _8 `% s5 P( r% z: E4 j
- printf("to me:%s\n",recvBuf);
" r' g: _# a: k/ z - memset(recvBuf, 0, 100);
0 j. k) R& x, R( H8 k7 v1 Q - }$ V' Y I) Q8 }0 k% K0 o1 v
- closesocket(sockClient);, m# E0 Q: y; _. ]
- system("pause");# [/ t! P3 z% n: F) M
- return 0;
& h d( P6 i I* K [* a# z - }
复制代码 客户端代码:0 D" g' ]! q$ @: b3 S
- #include<winsock2.h>
: ~/ a; R* d+ ~) d4 X& P. Q - #include<stdio.h>
`' B+ r! Z0 Z: r. B2 h' B: a - #pragma comment(lib, "ws2_32.lib")) ]. a7 [$ c$ k, a
- void main()
7 t) P- C2 R% |4 V/ l/ M - {' a" d) L+ j p0 e
- WSADATA wsaData;
3 f, N- Z6 m. A" E+ i/ f% C. X - SOCKET sockClient;//客户端Socket
9 @# P3 b& f6 K - SOCKADDR_IN addrServer;//服务端地址" V8 w5 U% N% y
- WSAStartup(MAKEWORD(2, 2), &wsaData);
% J9 Q3 U7 V8 {* i+ M2 U. ~2 h1 i7 o - char message[20] = "HelloSocket!";; `3 p0 A4 C6 p: a% T
- //定义要连接的服务端地址
4 K* w7 ]. A. A# r- s9 F - addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址) p/ v$ U5 m" N q. C3 U9 l
- addrServer.sin_family = AF_INET;
$ w2 ] S9 z+ f% N, P- v( k9 j" P - addrServer.sin_port = htons(6000);//连接端口6000. F/ t4 a5 A- m1 S, W! {
- //新建客户端socket
' H. t. W# w, X$ Z" v6 }( I. ]) m - sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);& e# j* Y% }& _; }7 r4 k! e' O
- int s = 0;7 H! f9 ]/ y# X# I& y9 Y8 I$ o
- s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
( u! V2 w \( e0 k - / b6 x' V$ q4 z/ a0 }$ ^7 G1 V
- while (1){
8 _9 Y+ q2 ~) v" S$ x5 r9 ~ - //发送数据
& c4 Q; O7 \$ ^; y7 B+ r4 |. c7 i* T - int a = send(sockClient, message, strlen(message) + 1, 0);9 A& T, r. T# v9 W2 w- c
- printf("to server:");9 E4 J5 a9 w6 u' \
- scanf("%s", message);
( l) n" C! h! L) Y2 i - ; k6 S) l8 x6 Y8 n- J" L+ D
- }) x! o+ m( T" u3 F0 A
- //关闭socket
8 M' j0 ^9 k) o - closesocket(sockClient);
) o5 u+ i. k. a5 g - WSACleanup();% I* j* d( F) W- l3 {: a. m7 C
- }
复制代码 求懂的高手来解答一下。
: Y% P5 S+ D! z+ ^谢谢了!$ S" s+ _3 L! X3 N, c. W
+ L- ~+ m/ Z6 }' p1 X
9 E( }3 G0 H- Q: p
/ W1 B/ I) I- S |
|