管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。
% o3 S4 l7 E8 R6 z- y/ j: T, n我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。. j3 n5 P4 h7 } L! |8 `; z0 z# {
Talk is cheak , show me the code.
/ O& Z2 a- K+ |2 ]7 T, b3 `服务端代码:( J: U# p' \" v0 c( V: g0 U
- #include<stdlib.h>1 _" u1 E# K0 |( T2 Y2 ?+ Q
- #include<WinSock2.h>
2 K, {3 S! M9 E: U. U - #pragma comment(lib,"ws2_32.lib")
$ K1 y9 h2 R3 j" A - int main(){
4 N% R/ I7 ?; z2 l5 s6 h - WSADATA wsd;
@4 h G5 Z' O# P s, h - SOCKET sockServer;6 y! k9 L$ i9 A% Q) B- t0 I+ g* h
- SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号0 q$ }+ {- c4 c2 F
- SOCKET sockClient;' \8 T. W+ d8 {) q/ R
- SOCKADDR_IN clientaddr;
' j& K, [7 q+ q6 ^+ ~# A - WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口0 E$ o) u3 D' r8 S3 }! z1 Y! K
- sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket
$ ?- r/ K$ v# ~$ M. h; R( B! i/ ^
7 M* T; S. ?! f8 I7 ^
! X7 h9 s$ W: x. ~- if (sockServer != -1 && sockServer != INVALID_SOCKET){
6 u4 f2 T( i5 K9 B- h+ h - printf("Socket has been created :%d", sockServer);1 c+ d6 U9 X1 b) E% ]. s
- }
1 T' k+ F) e4 r+ J - else{
5 F7 V9 r4 q1 ]% Q' f$ S - printf("Socket create failed.");, \: u$ {% h/ l0 R q
- exit(0);
, f6 K; U+ a9 c" [+ v - }
! ~4 _8 S1 w% J b3 A2 o' X - serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);7 ~( G1 V1 y' _* N% z$ q
- serveraddr.sin_family = AF_INET;
* f" @4 S8 b8 G/ c/ t - serveraddr.sin_port = htons(6000);//绑定端口6000
4 ?" K3 M( m8 J - int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));2 H% Y6 t S9 i T3 G5 p9 q4 u
- char recvBuf[100];3 F* n1 e' E8 f0 B0 [
- int len = sizeof(SOCKADDR);6 C' q: b$ D0 G. |
- listen(sockServer, 5);//5为等待连接数
1 {7 t* R; Y9 j; w4 g, W - while (1){
# z5 Y* T8 X8 L: l/ r; V6 F - sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);
" f" N% g, p) p* O# a- z - //接收客户端数据 w& V- x. f8 w2 x+ b
- recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);
1 F5 F; A8 i( G/ Q - printf("to me:%s\n",recvBuf);
9 A% s6 w# R! z0 o- h. { - memset(recvBuf, 0, 100);4 q4 y R! T) {( n8 O o
- }
c# O' j% |1 u& u2 J% |1 { - closesocket(sockClient);4 I% O2 ^1 T6 Q! c5 u p: I
- system("pause");
, Y L* ?! S$ J) I* E, [7 E - return 0;$ l. p5 I( g" E: O' b4 z
- }
复制代码 客户端代码:& w, I2 |: D' |8 m1 N. [* T
- #include<winsock2.h>
9 U$ i, y) G" Q% g - #include<stdio.h># ?" k5 H$ k/ f3 N: e6 \
- #pragma comment(lib, "ws2_32.lib")
- }* z1 ~" O! f3 I# N6 Q4 t, S" Z - void main()' `9 s3 G& d8 ~( _) W) r: a9 y4 ^- _
- {; `# {3 j6 i) m! @5 s
- WSADATA wsaData;* U! S1 [2 S: r. `5 j- B
- SOCKET sockClient;//客户端Socket
u6 e; p t) R4 ^& e% o - SOCKADDR_IN addrServer;//服务端地址2 T1 }$ z! v% s, w( c5 q
- WSAStartup(MAKEWORD(2, 2), &wsaData);
' J6 M; N3 x/ _6 c* O4 v - char message[20] = "HelloSocket!";
* i# x( Z& d0 o( G7 P6 M6 w - //定义要连接的服务端地址2 ~1 u4 N8 O: [* ?
- addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址): n) w3 U' U9 u C
- addrServer.sin_family = AF_INET;# H- q [. [8 P
- addrServer.sin_port = htons(6000);//连接端口6000# u3 Q" _$ f" [" F' @. B
- //新建客户端socket6 d g; P& s7 {; `
- sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);. Q% C/ g6 n% e' l5 D7 ]) I* x" m5 y
- int s = 0;
7 A' M- z% s- ^8 ?7 ]7 _6 j - s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));: p* E/ P( e' ^! V/ T
- 3 ^3 u, t7 v, K$ `
- while (1){
( e( r5 R; K/ _7 ]( c# H - //发送数据+ C/ U0 {2 o$ v; Z2 ?
- int a = send(sockClient, message, strlen(message) + 1, 0);
9 Y3 u/ U$ a& u; y - printf("to server:");
7 `0 v6 N2 D; P: I - scanf("%s", message);% A3 V' |3 z ?2 r" d
/ Y2 U4 S( l. O! U- }
: F4 P; j; C8 l8 ~, E2 b - //关闭socket
0 b. Z# X l" _- p - closesocket(sockClient);/ z+ K2 J; c% s; H$ D2 |
- WSACleanup();# o% Y# L, i/ a! Y( x
- }
复制代码 求懂的高手来解答一下。
! J# V9 \, f- W$ x# h谢谢了!5 S0 I7 \8 d, n7 V9 H7 ` H% w
0 N# [+ D5 f/ {6 w4 n. d& q2 C) q; p/ G9 t! s1 }2 \- Q( H
6 e; [. l4 f8 ^. V/ ? d, T& k) x
|
|