管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。- t8 E0 I3 j# }4 e. W( Z
我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。0 ]2 M. I7 e; b3 U: W2 z) b. p
Talk is cheak , show me the code.8 _% b$ z+ s: b: h( L9 h* E5 b
服务端代码:
. p$ D4 ~: t' N- #include<stdlib.h>
; a+ t- q% ~0 X% l. n) U) K - #include<WinSock2.h>
! U" P( N, Z+ n& e$ ^" v6 i - #pragma comment(lib,"ws2_32.lib")1 S: t( f! N& |7 z& X% R$ J
- int main(){
" ]/ c/ ]$ O' s: @+ R - WSADATA wsd;' p2 A. X% Y6 P4 ^4 v5 C
- SOCKET sockServer;
* v% B f( M" s7 d& B" x - SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号
8 f9 h0 C. c$ O8 z - SOCKET sockClient;' B6 T$ P2 u1 L' V) C
- SOCKADDR_IN clientaddr;
9 d/ f5 @. }( X; R( z) @, l - WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口0 W0 J! s( j0 \9 N5 [
- sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket
) S. o6 [/ I, n$ H/ C. t - * ?; O5 |1 H! C+ y+ q7 Z
- 7 Z( s% h" @& v
- if (sockServer != -1 && sockServer != INVALID_SOCKET){2 a9 S P' r& y, t
- printf("Socket has been created :%d", sockServer);
" l3 Q/ X8 z4 d - }
; y& Z$ x) D0 E1 P, f4 Q) ~# V - else{
( g7 V) A/ |& T) `+ M Q8 w - printf("Socket create failed.");
0 E7 B2 {5 L3 N2 s5 u8 h9 t% p: W - exit(0);
^% ~" s9 x- k& |4 \ m, O' ? - }, g& u/ @) \/ O# d7 l! ^, M
- serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);6 S# ~0 F6 l" R6 J0 a6 r
- serveraddr.sin_family = AF_INET;2 M5 x% Y1 A, g6 ~3 @8 q! z
- serveraddr.sin_port = htons(6000);//绑定端口6000# f* t2 }4 Q! m! Q; q( n: f
- int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
* V9 h& B/ F8 ] - char recvBuf[100];
( V2 J8 c) L& M; A# e8 e0 z& G% U1 ^* [ - int len = sizeof(SOCKADDR);, A1 W( I9 Y% U4 r0 m
- listen(sockServer, 5);//5为等待连接数
' e4 O f9 i. e8 n1 Q - while (1){
2 f* y4 ^* V* Y: X) q - sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);
; N# [, O3 r9 k6 x) R - //接收客户端数据
1 k7 f# \# J+ R7 b4 v - recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);. r4 N. T& h" _
- printf("to me:%s\n",recvBuf); T, n& Q% `$ N6 {/ J1 T) b
- memset(recvBuf, 0, 100);2 U$ e3 L' Z5 y0 _ [4 k6 | }( O
- }5 O2 G* L/ E5 Z' p* a
- closesocket(sockClient);; C" h1 Z) f. [% p
- system("pause");
5 K9 j5 ^, [0 F! J! c - return 0;
. _8 E" Q4 c8 T - }
复制代码 客户端代码:1 A0 c- w1 T& N; \ B0 K4 X
- #include<winsock2.h>7 m' a+ D: Y+ g% \$ T. V- v
- #include<stdio.h>
8 y; U7 j: o2 A& D" W - #pragma comment(lib, "ws2_32.lib")! l/ j6 ^" p/ I0 R' [
- void main()
; G* x C. t- S! h Z - {1 i( a% c# m# b. G. N* n
- WSADATA wsaData;
2 t# t4 }8 ~# @- T - SOCKET sockClient;//客户端Socket
4 _6 B2 f2 ~& N0 A - SOCKADDR_IN addrServer;//服务端地址
1 {- R% W1 S0 c' h# m - WSAStartup(MAKEWORD(2, 2), &wsaData);3 R3 X% h" l, {- g- X) p" a$ {4 \
- char message[20] = "HelloSocket!";
9 @5 k) y& t C6 Y - //定义要连接的服务端地址
C3 b. G! [ t; ?. h5 v - addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)2 e' m* N9 e U# N5 X
- addrServer.sin_family = AF_INET;# z* `% s+ n0 Q/ x7 c. x
- addrServer.sin_port = htons(6000);//连接端口6000
5 B$ U! |6 W3 Y$ o+ G3 T- n/ D! N - //新建客户端socket) C, U, g$ }0 x, V" j
- sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);" N. q6 C% h5 r. `' B: u+ \
- int s = 0;
% o1 @/ }& p2 t4 ~0 U+ M7 H" Z - s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
& j, O m4 \9 b7 p" D0 ]- z
% G' Z+ H* _7 a- while (1){! A' |3 G3 d2 s8 T+ `* O$ N
- //发送数据
5 y/ e( U7 @% D" f+ a# E+ W( C7 f - int a = send(sockClient, message, strlen(message) + 1, 0);. S. z5 p- y) v9 q8 \$ |) s5 |2 l
- printf("to server:");
1 w; k- w; b; l5 c0 ^7 Y7 P G - scanf("%s", message);$ W6 ]# q4 \$ {2 ]- i1 h5 M8 P( u
- / Y3 k; _% H! m* U" W
- }
" @4 q V+ d8 t" o4 L& c - //关闭socket. S. O8 d8 s0 V& x* s
- closesocket(sockClient);3 A: D* ^- E# L3 H
- WSACleanup();4 ^4 V. u- R* q5 o" B" }! d4 \
- }
复制代码 求懂的高手来解答一下。; N5 T& U+ O4 f" c) {* ~7 p3 V
谢谢了!
$ V. y# f n! O1 k/ O+ p$ a* j# w2 p! }3 y! h, Y7 W% d5 v- u3 c
5 K: k6 T) n) q& A9 \9 U, a
& M9 i- \) s( ~) h# G9 c% b
|
|