管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。
$ C Q9 D+ R. C" J3 d! T- C我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。 R. F8 c& y( C- T7 ?
Talk is cheak , show me the code., o4 J. B, g( Q) F/ W
服务端代码:; @3 ] s- X4 J Q& ^* l( ~
- #include<stdlib.h>8 v! m4 t( g- I
- #include<WinSock2.h>
. E! A2 v" f- I2 m1 b - #pragma comment(lib,"ws2_32.lib")
1 U, W z) L9 ?, _* L - int main(){$ ]) @. p+ A2 ]6 H% H5 v
- WSADATA wsd;% @1 _6 ]/ H+ p0 q2 N: O
- SOCKET sockServer;) r( l# D2 V' h% z0 O. \9 E
- SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号
! x5 N4 K' x0 C2 n5 t( {9 q* f+ A* V - SOCKET sockClient;6 j# @5 h+ Y/ B+ ~, A' Y# U1 [7 U
- SOCKADDR_IN clientaddr;! j/ g3 b r6 G8 @' P8 X h+ E- n# l
- WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口
: ]( b9 H, h# J3 I; J: x6 v! w: g - sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket" m9 [* X0 a4 p( `" ]
- 0 k- j! ~( W2 b# J* G/ E: T
+ x0 z1 A% k6 T- if (sockServer != -1 && sockServer != INVALID_SOCKET){
) O9 g, I9 g, d5 q) S - printf("Socket has been created :%d", sockServer);- Z& C0 Q9 r' t' j, e6 ~" \
- }
3 H. K7 ~8 z" T - else{
$ r2 ?6 B2 ?) i; T% G1 B9 Z - printf("Socket create failed.");
+ f/ H# c, f2 t0 M+ [5 u3 n$ {& E - exit(0);' i- I* q: L9 {$ s) ^1 D
- }" _+ R' z# q& Y s( K5 o
- serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);6 l6 Y. g% }) g; x( O% V
- serveraddr.sin_family = AF_INET;
5 y: A& e0 ?1 H8 \4 b, q* p - serveraddr.sin_port = htons(6000);//绑定端口6000
3 [6 ~- w6 P; S m' n - int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
2 C5 C; |3 @, z - char recvBuf[100];
" E6 V! v/ {0 T% t& I" x) T - int len = sizeof(SOCKADDR);4 g9 a1 U" O0 ]. P8 V8 \5 ]- O
- listen(sockServer, 5);//5为等待连接数8 a5 w; A0 }0 B3 t# l; a0 C- t
- while (1){- P) z2 Z8 u7 q% h& e$ N
- sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);
2 M8 |2 Y# o. S u; O( E - //接收客户端数据7 c( s# J& b. p: Q) a4 P
- recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);
9 U# A# @" e; s2 d T - printf("to me:%s\n",recvBuf);
" s7 F' U% ]" `! Q9 b8 c8 Q - memset(recvBuf, 0, 100);) H9 H# G; z* \) x" Z9 a
- }
# i/ Q" [: ?. Q& D - closesocket(sockClient);
/ Z: I) N N R! B! J - system("pause");8 J, x. {$ I4 C, ~' m
- return 0;5 _8 u" N# u+ [. I- e3 B1 }4 R
- }
复制代码 客户端代码:
: `& t; s+ J# {, g% G) K- #include<winsock2.h>
) }% s( `, C2 k1 ]7 y! n - #include<stdio.h>
7 K' B' e) w# V9 I7 o! a; d - #pragma comment(lib, "ws2_32.lib")
- m9 g* ^8 s! [4 F6 `/ Q% R - void main()
- j: g* O6 V; Y& V/ ^ - {
/ u* L% |' I( j4 R$ o; M0 K - WSADATA wsaData;6 l, \0 x* E6 |! y
- SOCKET sockClient;//客户端Socket/ ]9 D1 p5 R+ i W2 ^! [; H. ^' Q/ k5 a
- SOCKADDR_IN addrServer;//服务端地址% r ?) y. P4 Y6 x8 F
- WSAStartup(MAKEWORD(2, 2), &wsaData);! D! `. X/ u2 M$ K, B
- char message[20] = "HelloSocket!";. X+ Q% H4 k7 u$ @$ V* y: V
- //定义要连接的服务端地址5 Z% l- y3 R1 k
- addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)
6 O( z3 a7 n& n% \) i - addrServer.sin_family = AF_INET;
( P: C/ B) m0 i - addrServer.sin_port = htons(6000);//连接端口6000
' J. G+ s- l& L( o( l0 [ - //新建客户端socket2 y9 D% ?* H& z& v' y7 z; l
- sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);, T0 D T: H/ q/ e
- int s = 0;; ^" {. t6 a( m7 G% E6 E# B+ C
- s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));# M$ x* T% i; J/ _$ G
; e7 c* P; h4 @8 p# _' q- while (1){5 y) J9 s1 ?4 X3 r3 l: V7 j0 ~2 b; y
- //发送数据1 x4 t0 o1 E( f: z
- int a = send(sockClient, message, strlen(message) + 1, 0);6 G1 z! _1 |+ m2 w* X
- printf("to server:");
, V+ F4 w% ~1 Z1 d% q% A( q; v5 P - scanf("%s", message);
2 I% P5 D W0 R) c) z+ _
1 C9 R+ M2 Y5 P* J4 w8 @- }( g, v- t; n H* N% k1 \+ A" X
- //关闭socket
?2 f, I' E4 e( P( v% P! A- S - closesocket(sockClient);& g0 [% E$ E/ p$ t5 J. Y
- WSACleanup(); Z3 F$ h+ E/ |5 Z3 @ Z" |
- }
复制代码 求懂的高手来解答一下。8 [: u7 X& `* S# N5 Q" c" u, _
谢谢了!
, L( J$ A+ i# k/ l+ `3 A
4 H# v+ q8 q" p* K! y0 z$ r4 q6 s5 w+ P
5 U0 y6 h' I3 S& f& } e# I5 {" Y
|
|