大家好,感谢你的回复。
X( e) E7 J& E) @0 w我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。# ^. @. C: h! h6 v. D$ ^# q* f
Talk is cheak , show me the code.
9 b: m8 F2 M( y1 p ^6 ^服务端代码:, V9 H8 _& K* d- \ A1 R
- #include<stdlib.h>
- g/ k% R+ d! l, e4 b - #include<WinSock2.h>6 o9 b$ ]4 i3 K& p
- #pragma comment(lib,"ws2_32.lib")
3 G8 i& Q Z9 W, A& L - int main(){6 Y! F S0 K! C& Z. r, H! b/ R' t
- WSADATA wsd;
1 `) |0 H7 b: T4 T( E* ?4 D! y - SOCKET sockServer;
# H( w- P( I1 Q! S8 p! t' M; ]+ | - SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号5 a# j1 z" X n6 h8 \4 q
- SOCKET sockClient;' g$ N7 X5 ]6 w
- SOCKADDR_IN clientaddr;" X9 Q5 l! a+ ^- `* q4 a* S
- WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口
" M7 D5 n% J2 U - sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket
S3 N/ n1 }- \/ |
3 ^# b- ~" v$ \. t
8 L8 Z8 h& a# T! L- if (sockServer != -1 && sockServer != INVALID_SOCKET){# ]! O m3 p/ i
- printf("Socket has been created :%d", sockServer);
' a7 t U! _* }% Z' r Z - }& u3 h; D/ a& u
- else{: l! j0 r1 O4 C1 E9 u$ {
- printf("Socket create failed.");
# C" ~. Y# F3 t- Q8 O; ?3 R: ?; q - exit(0);+ J0 r) W" V- }% v/ K! H
- }4 T$ c* f- y: g6 ^
- serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
) W8 Z7 |' l3 a4 a+ x2 f1 q% M - serveraddr.sin_family = AF_INET;, ^8 x' \" Y! K$ S- Z" K
- serveraddr.sin_port = htons(6000);//绑定端口6000
) Z* y( N3 W& T& N/ ~& C7 U - int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
3 S! z% H' ~8 F - char recvBuf[100];
6 M4 M# ^/ ^5 z, l: b - int len = sizeof(SOCKADDR);
. _+ L. q4 [ ~ ^# H - listen(sockServer, 5);//5为等待连接数2 x6 ]/ w6 g# e5 B0 G
- while (1){& I1 ^" K" C: b1 {" t ^0 H
- sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);7 R9 N. I0 n: L. w
- //接收客户端数据
; G+ _, F2 `' L, V( E - recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);+ e) C# P6 l3 @; Y0 j; M {
- printf("to me:%s\n",recvBuf);
& a6 |; ~3 {' z+ ] - memset(recvBuf, 0, 100);- L/ c4 Y2 o( E$ X0 l- c
- }. h; z# I% c% o
- closesocket(sockClient);) I, u% q0 ?3 ?! R
- system("pause");
) r4 b* P5 t2 s$ D- G, V0 M& S1 K - return 0;4 D- Q1 @ N1 w0 z2 L x5 j
- }
复制代码 客户端代码: n7 i, U# f/ T T/ K
- #include<winsock2.h>) x7 U: E/ r! c) \4 k
- #include<stdio.h>! v& Y0 z' W7 }7 V0 w
- #pragma comment(lib, "ws2_32.lib")
) D. U% m! }1 b' |1 V, X - void main()
' l) e' E* l; H. C) h o, Y& S - {* C( e# G6 w# X' f" J
- WSADATA wsaData;, i' I1 K% Y0 S2 R' t/ u; o* t$ a
- SOCKET sockClient;//客户端Socket
0 S/ T/ U: q$ A5 L7 ]' f - SOCKADDR_IN addrServer;//服务端地址$ x" k: l7 B. W: o
- WSAStartup(MAKEWORD(2, 2), &wsaData);; b* _; N% d( C# ]' ~: L6 A
- char message[20] = "HelloSocket!";
( K1 C6 h- G, b- Y - //定义要连接的服务端地址) @+ \7 _! x6 S
- addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址), }& R3 ?& [" i! `
- addrServer.sin_family = AF_INET;- q: ]% D: z- n. g- D$ m
- addrServer.sin_port = htons(6000);//连接端口6000
# M7 a1 Q6 k1 p# r3 [' Q1 q - //新建客户端socket0 i. i0 r3 Y: T1 R7 X$ z
- sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);: F/ e f0 u" E3 |" }* ^: ?
- int s = 0;
4 k6 |+ q2 ]$ w, n! X: t - s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
5 M& I7 X' @, s3 d9 I6 g. D% i
: u3 e3 A4 R( O- while (1){
]! F3 K& T! @& G - //发送数据
6 o' x# N) b0 q; ~" ? Y' x; q - int a = send(sockClient, message, strlen(message) + 1, 0);. J6 m" u C9 H; y
- printf("to server:");
8 \# r/ B! l6 Z - scanf("%s", message);6 M3 x5 r+ s( h$ Q* l
+ d% T; h" ] U7 ~0 D, D' f) [) N' G- }# D! C' G/ x! ?$ V G7 N
- //关闭socket0 [& |" l; w5 d9 s7 K9 u% ~" `
- closesocket(sockClient);
: L$ B( Q: y3 n1 S - WSACleanup();
7 {; t e3 q w: B/ c - }
复制代码 求懂的高手来解答一下。
& J- Z* N7 W7 t& b4 [谢谢了!$ Q# i; a& b+ m7 J
! C% s k. g& i! B3 ^ ^
+ x$ P+ C P! E+ ^2 S4 ]# V/ v& p! D7 I6 D8 q+ K
|