大家好,感谢你的回复。
$ T- {3 w5 { r& d我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。3 e. y3 D2 ^$ c
Talk is cheak , show me the code.
" t& J7 S$ e. D' k服务端代码:" b* H( F5 A1 P* i3 h, s3 E
- #include<stdlib.h>
0 b4 ^% f( G9 P/ j1 J/ s - #include<WinSock2.h>! @6 L2 d% Z9 k6 Z: p0 T F. e
- #pragma comment(lib,"ws2_32.lib")0 A/ F4 I- _: s- f) R. C" n
- int main(){
; e3 T( U% H- d* Z8 [ - WSADATA wsd;7 O V2 N" ^: a4 O6 h0 S% J7 i
- SOCKET sockServer;5 N! p% k7 l6 B M
- SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号) b6 L y* \$ S3 [7 ` s
- SOCKET sockClient;2 b1 z4 I5 n0 m4 N
- SOCKADDR_IN clientaddr;
l) m0 j M! `9 P - WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口" {# j1 K9 d8 C2 e( _' O
- sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket
% R- A) ]( G# i4 P, m7 L! L/ W6 [ - 4 u9 G$ G% Z- F- T* @$ q$ y
- ' }6 S3 _: h7 k. V" B% A
- if (sockServer != -1 && sockServer != INVALID_SOCKET){- Y2 u% b5 L# d; ?) U
- printf("Socket has been created :%d", sockServer);
! q2 \3 [/ ^* f - }
- _ Z$ n4 W, Z5 q - else{
/ W: _; A% t0 |$ O& q# j - printf("Socket create failed.");
0 Z9 e: x; S3 W' q5 p4 W$ p. H - exit(0);3 L1 C5 d: g- e0 }% Q
- }
8 a: V$ U8 e7 P, _0 b* O3 G. o7 c7 e8 H - serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
7 v0 H7 F% F6 C. D - serveraddr.sin_family = AF_INET;: m2 \& E% [2 g* J
- serveraddr.sin_port = htons(6000);//绑定端口6000
# |- K& d1 |6 P. F) h. r& `/ b - int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
# w" `& R+ W- q1 N* l# d - char recvBuf[100];
% V: s! L" _$ o' Z - int len = sizeof(SOCKADDR);
# ~, V `9 ~9 w: [ - listen(sockServer, 5);//5为等待连接数
( g: c" A3 L6 A) S4 O - while (1){5 K% Z: |' Z7 M$ f' {6 x6 B
- sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);
( W% z Q$ J: d" [" P$ @ A( S, o - //接收客户端数据
3 s" V0 c$ C% ?$ S+ h1 P - recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);! |: p$ }% s9 m2 U7 u$ t' i
- printf("to me:%s\n",recvBuf);
9 K N" \% N8 e1 G - memset(recvBuf, 0, 100);
9 d: o/ A1 Y* ? B: }* Y1 M6 ? - }; Z% k+ A. `7 H, P% Y6 U
- closesocket(sockClient);1 {& i% o" K' b
- system("pause"); c5 A* f# e# s9 h* x1 z) d4 c
- return 0;
, `( m7 v: q/ ]/ U. [1 L! d1 J6 T - }
复制代码 客户端代码:* i& g6 ]* Z# \& ]
- #include<winsock2.h>& {* m: O' T! i4 o/ B
- #include<stdio.h>5 ^- @# S' z+ r" W: }$ d& X" m$ A
- #pragma comment(lib, "ws2_32.lib")# }2 f; T+ O V* _
- void main()' n9 P% b/ \1 S
- {* }: A! b- E% L; A2 U4 U
- WSADATA wsaData;. [6 w# j- j& w
- SOCKET sockClient;//客户端Socket
3 ^: M" H. R& g% M. x - SOCKADDR_IN addrServer;//服务端地址
/ Z4 O# }' u, D3 o8 P5 q) \ - WSAStartup(MAKEWORD(2, 2), &wsaData);* `2 T Q, h. e5 G$ b9 c
- char message[20] = "HelloSocket!";2 n0 D x8 l' C5 E' d
- //定义要连接的服务端地址
# M ^$ q' |3 w6 i, f - addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址), y: C% `% M9 D/ B
- addrServer.sin_family = AF_INET;
- x; Y. f4 V8 p. s0 r# T - addrServer.sin_port = htons(6000);//连接端口6000
3 P, _+ g; f; _+ [6 H8 ?5 Q$ X - //新建客户端socket
( @! D4 l3 w, Q/ O' A) R - sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
. g$ l- A* z+ b- T3 e - int s = 0;# H Z& A# Y4 Y. l
- s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
5 d( s6 P$ Y! E1 x6 C6 w, }
0 Q' A8 D5 ^: z; a; L- while (1){4 Y3 [1 c5 a' D* M% q9 m) g
- //发送数据
. G0 }# p1 [/ Z3 b8 h - int a = send(sockClient, message, strlen(message) + 1, 0);
6 U, U$ X- h0 m" q% O - printf("to server:");
. q2 t. w( E. a2 W7 I4 g4 { - scanf("%s", message);- Y6 B" p4 k% u
- " J# J4 J" j6 m$ Z0 N+ s
- }
: `% s/ ? G3 Y, v) S$ c - //关闭socket: [8 C- B* l4 S' _' e0 c
- closesocket(sockClient);
( N/ i9 F/ f2 C! C3 } - WSACleanup();
% X! F* O) C+ v' T8 y# K* C& x4 R - }
复制代码 求懂的高手来解答一下。
# i y4 p8 w7 m3 ^谢谢了!
) u6 F# ]& o; x) {) n
S& B4 R2 v' ?$ r+ j- K# e& Q$ e. I. q. u4 |8 M. y
" g8 o' a- b0 o4 H" Y
|