管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。# w2 M3 M; o7 H; d8 \* p! f1 \
我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。7 D e f, ~: g8 q& q; P: A
Talk is cheak , show me the code.
' L# B6 f9 [5 P! M, x. ?服务端代码:/ g/ h0 W8 p# e' x" R4 g# N
- #include<stdlib.h>) y0 [, [! V( }3 D
- #include<WinSock2.h>
/ N ^( i5 y! J0 x# ? - #pragma comment(lib,"ws2_32.lib")
* b I/ d3 I' r - int main(){
0 e$ D; @( I* N/ ^3 K" b) S - WSADATA wsd;
7 t1 U$ n& U @ n5 l' _# I - SOCKET sockServer;
7 \6 E* W' U5 G& z' S - SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号* K% L- ?* U: @3 ^# f# Y! M/ ~- g8 K0 w
- SOCKET sockClient;
c- J9 V: ~8 O* m - SOCKADDR_IN clientaddr;
% I0 F: f( F* V8 E$ X - WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口
" g( L7 t* R- t# D, Z+ D/ O - sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket; k- n4 e6 N* F4 R
- - B5 B1 j! L3 |% u) R, t
4 _$ R5 l" O4 d. Z% r( ~) F( {/ H- if (sockServer != -1 && sockServer != INVALID_SOCKET){
4 l, ~+ y& [( a' u6 | - printf("Socket has been created :%d", sockServer);2 J, V0 s: E+ e; [
- }2 q9 K+ p D# @) Y: m7 p8 O0 W! F
- else{1 ?2 F+ I2 o* Z7 D" O$ T4 Q# N
- printf("Socket create failed.");
/ o$ W' i, l3 i# L! a: E - exit(0);4 ?" z$ I' j8 K/ i
- }0 u* u" P6 p7 Y, X9 F
- serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);' a5 c& Q! c N2 m! O6 u' {
- serveraddr.sin_family = AF_INET;8 a! D5 p0 i g; v% q0 T6 T t
- serveraddr.sin_port = htons(6000);//绑定端口6000
% L3 Y9 g8 t9 H6 ~; n - int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));4 A+ s0 c$ B$ K# B
- char recvBuf[100];
3 G. z- b1 [' I& T, H9 G) P; r) H - int len = sizeof(SOCKADDR);
8 _+ N: t w, C' c6 k5 J6 \ - listen(sockServer, 5);//5为等待连接数
' [: ^. W+ s6 P& f - while (1){
- ^( a1 ?, J: I- O1 R - sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);( _$ w( z0 m8 d$ H+ [! |' Q
- //接收客户端数据! P' a4 I- |2 J! m2 S
- recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);
/ T/ ?+ z4 }0 }' E0 K5 { - printf("to me:%s\n",recvBuf);
8 n8 E8 Y5 T3 g5 o - memset(recvBuf, 0, 100);7 |2 o3 Q4 Z0 O
- }4 O) ~2 ?5 ^, h9 y! v! |3 }
- closesocket(sockClient);# m6 x5 L. K1 D3 ^/ {5 l* T9 j
- system("pause");
4 O* j4 u6 v/ I J - return 0;
; p5 b- H3 X/ s8 b0 m - }
复制代码 客户端代码:/ j7 O4 @, p; w) y8 ]0 f
- #include<winsock2.h>7 A5 s' k+ t3 t+ _, `
- #include<stdio.h>
, P- [ {& T3 z3 ~8 T s - #pragma comment(lib, "ws2_32.lib")
( L; ]9 `, x( L# A* S - void main()2 U! D! e8 V- L
- {: b3 b6 Y- K( t
- WSADATA wsaData;8 V1 M0 P8 P2 H, X; [3 ~, ?
- SOCKET sockClient;//客户端Socket
4 x# T: U1 d2 ]8 r* [ - SOCKADDR_IN addrServer;//服务端地址 m8 S8 F8 F4 R6 \. }( L
- WSAStartup(MAKEWORD(2, 2), &wsaData);
$ s1 \. M) k5 N L1 K/ _! p - char message[20] = "HelloSocket!";
5 b0 ~' I# P, o - //定义要连接的服务端地址+ ?. @3 F- M7 H9 Z# ~% |/ F8 K- t
- addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)9 B! A1 u; P* s; h- k
- addrServer.sin_family = AF_INET;" W. O9 L) s- p/ ]
- addrServer.sin_port = htons(6000);//连接端口6000
% v1 A; B; S3 v# X - //新建客户端socket
$ f: o$ P! U" k+ K! J - sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
& ?/ o: \+ S7 T8 ~ - int s = 0;
5 B* ]% [+ H z: N$ e3 D" f( j - s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
: _ @, \4 W/ b, c7 x
) ?7 B. n* G5 n7 |4 H6 n$ b- while (1){
3 Y9 R; t* f# l. L, O c' `. K - //发送数据+ H/ A3 I& U) E' g/ H2 P
- int a = send(sockClient, message, strlen(message) + 1, 0);
' {$ u2 ]% ]; T7 d& ]9 y/ b - printf("to server:");! I o# r' k# \* Z" M& f& [
- scanf("%s", message);
# v1 l0 W' n/ p, g
4 S; @' K: ?7 _) }) }- }
* ?3 d) W6 x4 f N' v% s - //关闭socket. M, i! H) z3 D* C" [6 ?
- closesocket(sockClient);+ d( r, ?+ ~( Z
- WSACleanup();3 I) f" S7 `6 V1 Q& S+ u
- }
复制代码 求懂的高手来解答一下。/ S% D# H6 K) c' \3 W3 u& z5 M. k
谢谢了!
$ C3 U* Z4 z4 J# G% `! O5 D7 ^
" u* N# ^7 T& r+ U$ A+ \5 o% H9 P; p5 T1 D; v1 h: C9 `% V+ w- r9 z
( u! Z8 W" c( \$ q8 t+ z8 d7 u* P- f
|
|