管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。
# O1 ]4 S$ j6 I7 ~ P1 U+ d+ q# A# h我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。2 u% N; B3 R* F
Talk is cheak , show me the code.
: [# {& U- O: U' o, _服务端代码:. G( m- O: O0 z
- #include<stdlib.h># }/ E, M7 @( b
- #include<WinSock2.h>
2 s( \- V8 I$ ]# ]1 F) f0 y$ c6 @ - #pragma comment(lib,"ws2_32.lib")5 ?2 U- ~) b6 R/ \- ?' s
- int main(){
) b* ]) Z4 W/ x8 \ - WSADATA wsd;
/ V9 B- i- Q, S4 U7 E3 p; J - SOCKET sockServer;
: }- f" C3 V( |; ?! n3 v, K' k& v - SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号9 a9 F- R/ j4 _; L K& z
- SOCKET sockClient;
* c0 Y! P9 i; R6 J6 i: E, j: n! s$ A! c - SOCKADDR_IN clientaddr;) q% ]& F- F$ G
- WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口* I0 p. D9 J( }: E* p5 M% i7 r3 b, H7 C
- sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket$ G6 I2 [ ?8 k8 J% c% d: w2 ^8 V d: V
- 1 @7 \# h: E ]& L r
+ B5 q& x# Q2 @7 u4 ^0 |; l- if (sockServer != -1 && sockServer != INVALID_SOCKET){# O: e! D5 J; t+ E/ S6 v9 O4 p
- printf("Socket has been created :%d", sockServer);
; }5 K" n; E7 U4 U" Q8 m - }
* g. _% h1 `8 h+ D' S4 v w - else{
9 V4 Z% q2 U4 b" K- {' ~* D3 b - printf("Socket create failed.");9 @" i3 Z- R. a8 o# s
- exit(0);
% M( t% W' H2 p" e$ w* b+ E) o* @( L - }
( D! s$ l/ J5 H* @3 m5 R - serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
2 B$ i5 b5 k8 v/ z - serveraddr.sin_family = AF_INET;' V+ q" {! @) h6 g" g" n/ B @
- serveraddr.sin_port = htons(6000);//绑定端口6000
* ^: D: [! \! J2 n' |: Z - int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
. X; i, B3 ?3 a. ]. I - char recvBuf[100];
% y7 z9 l5 y; U6 x/ R% p8 D - int len = sizeof(SOCKADDR);% C/ V+ H" c5 ]
- listen(sockServer, 5);//5为等待连接数
0 H N" p8 s( R: k - while (1){" ]$ @- {! g. z. u& {
- sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);6 y8 l. V9 u9 I7 G" c' V0 q8 w
- //接收客户端数据
8 a/ X6 N6 }, N8 {1 U* V9 S5 ~; O - recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);
* p% \& n- |; P6 c - printf("to me:%s\n",recvBuf);3 x3 f3 C; E8 e3 d0 ^+ B
- memset(recvBuf, 0, 100);* }( A5 h1 G E0 Z6 J" j( G
- }
: a7 u0 r/ I# z - closesocket(sockClient);$ y5 g; H5 R0 K4 v$ N" k
- system("pause");* n q+ w9 R+ V' w0 k; \
- return 0;
/ z7 ]4 s$ R( i' R4 f0 [. r! K - }
复制代码 客户端代码:5 H4 [" z7 F2 R, t7 ?0 \3 D
- #include<winsock2.h>
7 }# e% E, u4 H4 K$ L: t0 ` - #include<stdio.h>
0 q+ g# O V8 Y+ ]6 l: V6 r - #pragma comment(lib, "ws2_32.lib")8 T( j4 x, Y' {+ a
- void main()6 J* T8 I0 `, \( f. J F. @% x( ]
- {
& O# Y+ q( e- t N, T: Q: w$ ] - WSADATA wsaData;
7 h# b. n7 R+ Y) b - SOCKET sockClient;//客户端Socket) i" q* k5 m# E
- SOCKADDR_IN addrServer;//服务端地址
+ ]! U j `3 k' F* | - WSAStartup(MAKEWORD(2, 2), &wsaData);, w7 C" Y0 K# K* E
- char message[20] = "HelloSocket!";
! f6 R* _* n: W# B% i/ p - //定义要连接的服务端地址
y1 ]+ E4 P. w8 l% C: H) b% ^ - addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)
! G W8 H6 O! A) l - addrServer.sin_family = AF_INET;! M8 g) |# m) u5 y, F+ ]
- addrServer.sin_port = htons(6000);//连接端口6000
* y, P& p: {2 Z# x - //新建客户端socket8 U* B: C" r) l4 U* U
- sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
) M, v" D) F+ W# f: d - int s = 0;* ~6 p6 c9 g, f8 b$ W" V
- s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));* G" I& J9 H( d* R
- ) x" C9 a P7 P6 B) a0 H5 }- [
- while (1){
6 p5 f7 N9 n$ j- D" j - //发送数据$ _4 h9 Q5 N+ N# f, H4 ~8 B1 q
- int a = send(sockClient, message, strlen(message) + 1, 0);
) I: u4 r+ G' {1 \2 J - printf("to server:");
3 ? Q( {0 h) \8 `- j - scanf("%s", message);
- {- U( \) r, p. y H - ! `( P" n" F/ s4 J& j' y
- }6 E. y+ ?- d' W" w* e$ `5 C$ g
- //关闭socket
8 W$ |% I% O& H5 x- V - closesocket(sockClient);+ @& _; z' R: U1 p
- WSACleanup();
* j' A( j7 s r+ l% l& G- ^ - }
复制代码 求懂的高手来解答一下。/ B4 ?" D9 H% V0 l$ l8 X
谢谢了!. y8 L6 h/ b* `. C4 r1 O0 B' Y9 E2 D
- g) a* c* ?+ V1 L
3 b% v7 s2 \- l7 G0 ^9 Z; o, y; L" Z, b3 I
|
|