管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。
, L* i# p! X- \. I5 }; ?% ^我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。
3 X6 ]5 ~& X0 e* wTalk is cheak , show me the code.
. Y/ l$ W6 _" }$ I5 S3 k" ^1 Y+ [0 ]服务端代码:0 R# x* t _* K2 ^) V7 W7 r
- #include<stdlib.h>6 b/ c* G! a- t8 H9 k. l
- #include<WinSock2.h>
% H- G$ w$ e: X4 c, r2 T - #pragma comment(lib,"ws2_32.lib")0 u G$ g- R! M0 f/ v# e
- int main(){# k1 z% e! r! y
- WSADATA wsd;2 u9 L$ \6 }7 B0 Y: ?- }4 H, W
- SOCKET sockServer; B0 N3 v" }* q: S, O4 c6 N
- SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号# v5 P+ L% _" h: X8 y
- SOCKET sockClient;
, ^. c6 x) I P/ I: M6 D% C - SOCKADDR_IN clientaddr;) B" H! m+ `& x+ ^/ b# _! Q: ^
- WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口) { O# [* A4 K9 c8 K4 S- V
- sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket
% }( j7 f) @) F, s
4 b8 J+ X2 q& O: D( v$ ~
! N! e0 b% P1 w1 a; C& [4 l& q- if (sockServer != -1 && sockServer != INVALID_SOCKET){+ y# R6 o% q: M+ P
- printf("Socket has been created :%d", sockServer);% b4 x9 ~3 a/ x+ `- _
- }
7 O7 D( k: [4 z( M1 @) a - else{3 {, U! O- q7 c; C0 V6 e& b
- printf("Socket create failed.");
* A: A- O* F6 s& F - exit(0);( d l7 q( ~# |$ W( Q
- }, l0 h/ T, p: }) R1 |8 H
- serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
0 A7 ]: @$ z+ C# k- L - serveraddr.sin_family = AF_INET;! S) ~1 M* v3 W
- serveraddr.sin_port = htons(6000);//绑定端口6000
) Y5 e0 o. J8 ]$ t6 O5 ^0 a - int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));; N% D0 X1 J8 [; {
- char recvBuf[100];
( m/ N4 h6 i. P; e# P; u! T - int len = sizeof(SOCKADDR); c3 a9 z3 o2 O r5 a/ E- ?7 k
- listen(sockServer, 5);//5为等待连接数
6 S0 h' S* c) ?0 t' V& h - while (1){
; d9 A9 U1 Y$ J- F$ x% [% } - sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);! C: i O2 i4 E8 J' A( E9 w. |6 n! z+ {
- //接收客户端数据
8 D% ]& q& t2 n0 A+ o: W - recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);
! O" @, {* u+ A6 m0 H+ h - printf("to me:%s\n",recvBuf);6 B: {3 b2 y$ w, d* R. t6 i' A) G
- memset(recvBuf, 0, 100);
8 @7 _" o. y( z9 }. N - }/ g8 x1 ^: I& }
- closesocket(sockClient);
' x8 _, H6 N# {/ z- @- } - system("pause");
: k0 R2 W/ o& q8 V6 `: r - return 0;
5 _) j/ }4 l- R6 _+ y - }
复制代码 客户端代码:% i. O8 v9 F: P+ k0 f
- #include<winsock2.h>4 G; m: {3 j' l
- #include<stdio.h>9 l% y& M* N+ U' q5 k
- #pragma comment(lib, "ws2_32.lib")8 |, @' {0 q5 g V* H3 E- I
- void main()
( G5 S6 }2 o+ E G - {
# C |+ y: X5 N+ d; } - WSADATA wsaData;4 k2 a; _$ `$ ^8 b& i8 e
- SOCKET sockClient;//客户端Socket7 B! s0 A9 c8 ]: B" O
- SOCKADDR_IN addrServer;//服务端地址
7 M* ]1 m% `0 s: o0 y - WSAStartup(MAKEWORD(2, 2), &wsaData);5 w9 R- w* W3 J" j
- char message[20] = "HelloSocket!";. c4 y1 y' T- [1 b
- //定义要连接的服务端地址1 O) ~6 F3 H w: f# o3 T
- addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)
+ L4 h; n/ g% k" r - addrServer.sin_family = AF_INET;
' _: W7 M7 d/ O4 P - addrServer.sin_port = htons(6000);//连接端口6000
& Q4 f5 ^. w5 ~- J' A" h - //新建客户端socket
( T! u( f& g! b6 h - sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);, f9 @. b5 d% t0 Y; o$ M$ G
- int s = 0;
6 \' ~7 T# S& c2 T' A9 n - s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));
9 A# p+ D* W8 r8 `+ {
# @2 @" x2 i+ }8 _7 L, R" [3 K) T; i- while (1){' F/ f9 A- Q8 d2 z. A- ]4 H
- //发送数据
( f- ?+ p; ]6 i# m8 x - int a = send(sockClient, message, strlen(message) + 1, 0);
. n9 S* A/ ]2 R, u) S - printf("to server:");2 c4 L8 \6 y- k o `# j$ Z5 [
- scanf("%s", message);
# e. {$ j& [( @- p7 z b' W - 3 f/ m' ~' M) Q$ q% W: l5 O
- }: [* B+ T. a% S) o X9 O
- //关闭socket/ x# ^) V: T D7 B! p4 w2 h
- closesocket(sockClient);; I C% a& F" }( z+ c) I
- WSACleanup();
, w' K6 o- {9 _! e" X; e O - }
复制代码 求懂的高手来解答一下。4 s6 K; c' ]9 m; ?( c u
谢谢了!
# L9 a3 a2 } `" N0 a" ~9 V) P8 w+ \0 u- C' M" N! Z( l. b5 X. j4 n) _
3 z$ \2 k$ I l% x6 C7 I: l5 [# ~, {. R3 u" X: u4 e
|
|