管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。
- y% ]: d9 ]) r0 a: P5 j我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。. N; w$ X" A* F% c0 I
Talk is cheak , show me the code.
; H0 o( X1 N! f0 |服务端代码:
" D" P) k! o) L. ~; g- x4 T9 c3 j& C: d" @9 ^- #include<stdlib.h>6 l; v: `0 T( B3 r8 M$ o
- #include<WinSock2.h>
; @# Z& Q" H( ?3 A - #pragma comment(lib,"ws2_32.lib")
3 S+ Q& h. U4 t4 z/ V - int main(){
0 f) Z/ F( L! `8 V8 E - WSADATA wsd;
Y$ b5 D0 l& Z" R - SOCKET sockServer;
1 J" {" J$ M2 W+ i8 s - SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号3 @* q! L* {; ]5 P' B+ P5 Y! a4 H0 g O
- SOCKET sockClient;
! p W7 q0 j# G, n5 e+ [* ~ - SOCKADDR_IN clientaddr;& [' o( _8 D. i a
- WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口# Q" A' n- Y S. ]; g+ d1 {
- sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket
6 a! E0 _$ ]6 v9 U) _) R! \& ^
8 j: H; n; K7 }/ |3 b- 4 u$ W$ k3 B2 V6 A+ H- Y4 D. t4 d: E
- if (sockServer != -1 && sockServer != INVALID_SOCKET){. [9 Q/ ?0 Q0 ?* ^9 Y2 M
- printf("Socket has been created :%d", sockServer);6 F: u# U1 [ b* ~; B
- }
8 k L8 G6 q+ E4 T" v9 R$ Z0 g, Y5 \ - else{- \4 y# @" K) @3 J, J; A& v# \, _! C/ G
- printf("Socket create failed.");
- S/ z0 z' A% E9 @ - exit(0);1 \; s9 U, U+ h. I* o* r
- }
/ N' }0 H2 l. M' r3 E: |8 a# |% r/ [ - serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
0 p. @0 `) C$ E& a' _: P* { - serveraddr.sin_family = AF_INET;
0 i [" }% @! ^9 X9 o; F+ Q* t - serveraddr.sin_port = htons(6000);//绑定端口60006 H! x3 F: b/ R5 r% a( M" q9 d
- int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));, T5 O1 F# t4 Y9 ]( a& Q
- char recvBuf[100];
; s% [2 }4 C. x5 |; q" j - int len = sizeof(SOCKADDR);8 F$ h D7 _. {- ~
- listen(sockServer, 5);//5为等待连接数+ t/ c- H( N: `& }
- while (1){: U2 j( H. Y% `4 K
- sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);
0 t; F8 Y7 L7 B* P! ^ - //接收客户端数据
( f' @3 X l6 Q& e3 N, T - recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);! u# k) f9 L- b# `2 G9 S* Q; d
- printf("to me:%s\n",recvBuf);
8 K, C3 {( W9 j7 F, Z$ [* s - memset(recvBuf, 0, 100);
) D$ Q( z" ~8 N - }
8 y4 A- g9 E! s, J) j" S - closesocket(sockClient);$ ~: A) o" ~0 A
- system("pause");, N$ X# W2 q- m; H0 c
- return 0;
7 c: v% ~8 e5 Z3 r2 _+ }# r3 m - }
复制代码 客户端代码:
3 q' ?: ~4 I/ M" j) ^/ _: J- #include<winsock2.h>) \6 [3 A1 h$ o& Y- y ]
- #include<stdio.h>3 q: D, G0 m- n, k" V
- #pragma comment(lib, "ws2_32.lib")$ a2 P9 H( c& g! v0 L, e; h% h
- void main()& C7 ]; b$ i. C5 R* |) x
- {: z' _8 C- i+ ~, b) P
- WSADATA wsaData;
- E6 W% | m- p# |( P - SOCKET sockClient;//客户端Socket
" Y- l8 X, D& S+ @& Z7 T" V" S - SOCKADDR_IN addrServer;//服务端地址
" i, H7 H& @+ {$ p - WSAStartup(MAKEWORD(2, 2), &wsaData);1 _' }8 i0 h9 u# Q
- char message[20] = "HelloSocket!";' f9 Q. c( i* ~- E% a( o+ K- v
- //定义要连接的服务端地址
! C2 n# ]4 D+ @: P( t: o' _ - addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)! G; u6 I I. v
- addrServer.sin_family = AF_INET;
/ |3 N. Q# {7 @! S9 l+ C) }7 U - addrServer.sin_port = htons(6000);//连接端口6000
5 p! D2 L4 C: q" {; ? - //新建客户端socket
. E4 ^0 s2 S" e7 N - sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
1 I9 p0 ?2 Q) n( V6 G% Z5 G - int s = 0;( d7 X4 ~9 V9 l1 p, b
- s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));/ k* R% u: J% G$ S/ Q! |
- # Z% \5 V6 ?! M- U) W _
- while (1){2 i' _" q( _) D: V4 q1 d
- //发送数据
- Y0 g; R; Q9 E V) C - int a = send(sockClient, message, strlen(message) + 1, 0);4 P) H6 u* ?* |* l+ M( d3 B V
- printf("to server:");3 B$ U p a/ S t- ?& o- t+ }% j
- scanf("%s", message);" Z0 s9 T5 }- p
- 0 R3 o' O" \' j4 T$ f' O7 M4 g
- }
& i+ ~3 R" K& W# ?2 @4 u8 w1 F6 G+ m - //关闭socket
( p/ k3 ]) ^, M% | - closesocket(sockClient);
% e2 o/ u R v X3 q( A' ?: G9 _! o - WSACleanup();% G: s' g( n6 z
- }
复制代码 求懂的高手来解答一下。6 d' \: ]! i" L6 M- b# v
谢谢了!
* p, [" ~( {/ e5 A* ]- x0 T8 z
3 C* C8 I: w% R" y# r8 ]
& q3 r c8 P9 w& p- h2 G$ j4 w/ H& d: S% e- b
|
|