管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。
) {% B, f3 P, ~, w我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。
( V" ?5 d+ j" g9 R( ]7 Z3 N' LTalk is cheak , show me the code.
2 Z* W$ }# }+ R/ X$ \, |7 k) P服务端代码:
* e: H0 D$ P) x T2 c2 K n4 D- #include<stdlib.h>+ ?0 l7 ~, m2 M/ p
- #include<WinSock2.h> |2 a8 c' @ |2 d
- #pragma comment(lib,"ws2_32.lib")
( K3 y2 c8 q. N - int main(){
1 W3 k+ H. r- W6 X5 i/ P/ R - WSADATA wsd;
" ]- ]" s! x' C C5 Y- u) f - SOCKET sockServer;: x8 E- e' V# N, [* X) N
- SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号 f! \1 l. Z# f& R. w( {
- SOCKET sockClient;
- A# L; N5 U6 S& |4 s" G8 g8 k - SOCKADDR_IN clientaddr;
. W) t: i% p5 ?' Q - WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口1 i) B |/ c+ C8 @
- sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket: E i, l) g" V9 J" T" |% e+ s7 y' Z
- $ ?7 ~/ R* g# T! \5 t1 i5 Q
1 r! Y) h6 L6 G6 j/ w# x1 f- if (sockServer != -1 && sockServer != INVALID_SOCKET){! Y( f+ M+ e& j! w. L
- printf("Socket has been created :%d", sockServer);5 R# l$ K6 e6 C1 w5 \8 j; c
- }; S& M% W3 Z0 ]/ n# P
- else{
9 c1 b$ d" j+ @7 l - printf("Socket create failed.");3 A$ d( e5 S P* Q: h/ a
- exit(0);
2 ?$ X# O j/ { - }
; p$ \, a$ m. R/ h. q - serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);1 V" \( L. G7 N3 g0 G
- serveraddr.sin_family = AF_INET;
1 c9 L4 X- r* y - serveraddr.sin_port = htons(6000);//绑定端口6000
, P. u+ D' f8 N9 V& Q - int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
; ~' L/ M8 o+ i7 E - char recvBuf[100];
* i7 g7 f* F( |6 C! R9 ~ - int len = sizeof(SOCKADDR);( i- @5 d5 D) ?; D4 G
- listen(sockServer, 5);//5为等待连接数
' v' [; C0 ~5 J" J- n6 C - while (1){ T% | j0 ]8 t+ c' s# h# @
- sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);
+ d6 X4 E/ P, E( ^; q - //接收客户端数据
; s' g3 G" d9 f0 K4 |! ~ - recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);
) {9 H$ _8 C! U0 l g7 r - printf("to me:%s\n",recvBuf);
$ A: N) L Y; l) x8 [: M - memset(recvBuf, 0, 100);) o8 Y; e# J+ G2 ?7 |) _& W) ]
- }
* {7 N! n& J( y9 l' D/ V5 ]' f - closesocket(sockClient);; w+ G2 V- a( e; d* K, t
- system("pause");
$ p. \- S0 J4 z" Z/ f& P - return 0;
* n: S. e6 O: ?1 E7 w8 p - }
复制代码 客户端代码:
* B0 D- ^) ]' `% `% u- #include<winsock2.h>
5 j! Y$ V4 I" S; Q5 [ - #include<stdio.h>
6 Y8 W; Y* _; ^- }7 v - #pragma comment(lib, "ws2_32.lib")' T3 R5 n2 I4 b5 f! J& S1 }
- void main(); _1 k8 j% I3 O! C9 h
- {
9 R5 v) n9 V- i: A6 j- s) Q, R - WSADATA wsaData;3 }8 O: ]- z7 }7 A
- SOCKET sockClient;//客户端Socket
% n1 H8 S0 K- X4 h$ f J! w$ @ p, r - SOCKADDR_IN addrServer;//服务端地址
1 q' G# [3 p% l3 Y# M3 X - WSAStartup(MAKEWORD(2, 2), &wsaData);) P0 b( E/ D/ p5 d: z
- char message[20] = "HelloSocket!";" @ r" v' G. i4 f6 v3 L9 j
- //定义要连接的服务端地址
{/ h m) q1 K2 G2 z4 s H, t! h - addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)
7 a/ \) r1 R2 v; H - addrServer.sin_family = AF_INET;+ U$ o9 d2 ]/ p7 ~0 G
- addrServer.sin_port = htons(6000);//连接端口60000 g o0 r* {0 c, H
- //新建客户端socket& T/ N1 M S6 g- a8 Y
- sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);1 X: G1 p$ s8 f( K5 r
- int s = 0;
8 B; j7 o1 ^' f( x0 S - s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));- F( n k( C% n+ E7 x! l8 G7 o
; R2 |! Y+ b( L6 [4 f# ]- while (1){
' N& {9 Y" R* f' p/ b8 ^' v4 b - //发送数据
# {* y% q, d* F3 R* d! c1 l0 n7 a' p - int a = send(sockClient, message, strlen(message) + 1, 0);& r* o, ~: P; Z+ q8 \
- printf("to server:");0 n! J9 I6 L/ N5 M& a
- scanf("%s", message);
3 F, {$ G9 W8 y8 {6 L
$ x h& @- O0 a0 ]4 B- }
% g) r/ ]8 v1 I7 R$ S, m4 T - //关闭socket& L% k3 T3 P4 l
- closesocket(sockClient);2 s* V2 d9 p2 @2 u/ w
- WSACleanup();2 W# Z' Z- B: K) `! o
- }
复制代码 求懂的高手来解答一下。& T4 Z- e. n6 E* h
谢谢了!4 l, U' W" D2 A& g7 W* c6 O
% J, d3 _% v9 E5 a4 {6 s; z' O- y
) B" }) |0 e% O7 Z6 H& M3 s
3 R7 L9 @0 b3 d( L8 p
|
|