大家好,感谢你的回复。
9 q3 p$ P- b( ]6 ^我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。# U3 ~2 G Z3 ]1 c
Talk is cheak , show me the code.: Y! ?5 i$ H$ o Y; F
服务端代码:
$ I& _; Z2 O( y8 U- #include<stdlib.h> N) r0 R* b7 h- f
- #include<WinSock2.h>; ] D" l; H! m% \$ ~$ V) M, l) |
- #pragma comment(lib,"ws2_32.lib")
/ c* m9 ]0 m3 y3 T - int main(){
1 f8 g ]$ _) B* _- x- l1 p" f - WSADATA wsd;: q+ D$ C1 G0 A5 `
- SOCKET sockServer;
6 w7 V& n$ {0 F9 |" i6 k - SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号 E$ F- U! O+ { J
- SOCKET sockClient; I6 `4 g' g+ ~6 L- B4 B. M
- SOCKADDR_IN clientaddr;
. a' Q t \/ ~; I8 b0 e - WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口
% j: u+ C8 t/ t& S6 } - sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket
# R! e! [; d. i3 E# M( v2 J
' X$ ?; t( a' u6 d- " \0 k) s* M0 @% Z" [5 Q. A! u
- if (sockServer != -1 && sockServer != INVALID_SOCKET){
" ?0 c5 K% h) O, U& A8 {+ l/ _ - printf("Socket has been created :%d", sockServer);
! A" T3 h G }0 J4 m& F# T6 \ - }+ k' C, s0 [9 d' g/ H% y9 h
- else{2 K! M. }! s' g5 P) X
- printf("Socket create failed.");% U5 U% Y0 {: L. i
- exit(0);
9 ~6 K- G* y4 j d - }6 I" _! e9 ^' j/ B5 v- z
- serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);: E; H4 D4 V1 i2 c1 k, i
- serveraddr.sin_family = AF_INET;
# j( r$ g) ~3 \& w - serveraddr.sin_port = htons(6000);//绑定端口6000% S& J7 J( H4 i: Y$ E" _
- int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));) u) Z: @8 R/ G* a2 Z: L# A; L% z
- char recvBuf[100];
- [0 T+ C9 h+ B; o - int len = sizeof(SOCKADDR);8 A! b2 i' q6 u' u3 v
- listen(sockServer, 5);//5为等待连接数3 }4 N7 ?: U8 g& Y; E$ y
- while (1){
/ X( l2 h0 O, ?# o! X. v - sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);
: V; Y6 v7 A H7 u$ E- L - //接收客户端数据" o+ [ [- [ q* y u
- recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);
( x, I1 m% L$ O( q- k - printf("to me:%s\n",recvBuf);
( a/ _' I# d+ J, _ - memset(recvBuf, 0, 100);
5 N0 n+ R4 m0 h2 N - }" ~2 m, C2 |+ _: B1 z
- closesocket(sockClient);
9 S" D" ]" V+ b% f [ - system("pause");
" h2 B/ V4 T/ \9 b& s: r3 g3 \8 K - return 0;
) j: p: H) ~' P, ~0 z) A - }
复制代码 客户端代码:
' _3 L5 n; F0 M: P3 L/ D- #include<winsock2.h>- H: d4 o% s, y$ U5 e
- #include<stdio.h>; ~8 |3 R: f q/ ?, [0 A/ H$ z$ `
- #pragma comment(lib, "ws2_32.lib")8 a5 ]( K2 u+ G+ C, y1 G
- void main()+ c* e- F6 A/ ?% R
- {
3 f0 O1 M4 y! j7 h8 q - WSADATA wsaData;" O3 L) Z" A8 v, d( O
- SOCKET sockClient;//客户端Socket
; l4 q* }3 y* `6 X- j( W! t: q7 y - SOCKADDR_IN addrServer;//服务端地址
: U- h( [" V* a: ~; T, M - WSAStartup(MAKEWORD(2, 2), &wsaData);
3 X9 m9 m" B" v1 z6 D' G5 T - char message[20] = "HelloSocket!";
. X3 S* P& N! p - //定义要连接的服务端地址$ P$ s2 A$ I& C' F
- addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)
^8 m0 ?' V) S: D7 q( }4 j. l, V - addrServer.sin_family = AF_INET;
: D% \1 q5 m, c" Y& F - addrServer.sin_port = htons(6000);//连接端口6000
; a# M9 [1 u* `; |% [5 v - //新建客户端socket% N% t- N. C, g
- sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);7 |- q. @, @0 L
- int s = 0;
6 [4 ?- |- K* t N) c8 G9 q - s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));+ ]/ }; Z+ I# P' H: T
- 3 c* u3 a7 S& H- j' C% J
- while (1){
, u" M9 b& }6 X1 R c" y: I - //发送数据
7 P1 z& m( r- c# G" t$ V) x/ t5 S: s - int a = send(sockClient, message, strlen(message) + 1, 0);( v I4 b! o( S7 L# E A
- printf("to server:");$ J6 f" n7 ]5 ]' _4 m
- scanf("%s", message);
4 A! T4 d, S/ o! j/ K3 T! J
1 B4 K" W2 K9 J7 W5 ~( H- }
1 R2 ^: K! k) _3 g# n v; ^* { - //关闭socket% _' ]' g7 D2 i
- closesocket(sockClient);
, i8 @. `+ R/ e - WSACleanup();( u0 N" K% q& ^ M( z, O* p
- }
复制代码 求懂的高手来解答一下。& }# n1 d4 l- z/ t) i+ J6 D
谢谢了!7 G0 e5 Z* R0 W/ H. n+ Y" M
5 E6 `* k! a0 Y h' a
# m$ D' z5 U1 o$ E H! I/ T
; D9 X, [& }3 ^1 ]) Y |