管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。
8 j4 V0 x5 ]0 _我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。
* T6 ^8 Y- i1 z5 g% e4 [8 R7 UTalk is cheak , show me the code.: R, X2 A, A1 |$ ]- `& y
服务端代码:
; o( M" a- R7 Z1 s) C# E- #include<stdlib.h>
% Y9 t$ R* o6 ~+ I8 B7 ~ - #include<WinSock2.h>
# t6 `( a3 I, _% { - #pragma comment(lib,"ws2_32.lib")& F, l% f+ @6 `% E* N- m5 z2 [7 Q
- int main(){
8 x1 S8 d9 ?1 M4 o4 X( k' S - WSADATA wsd;; V. j- L* a1 T5 }& x) K
- SOCKET sockServer;, A& `5 ]2 Q% O. x
- SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号
" f* W5 k6 @" {4 c - SOCKET sockClient;! B: W% i! R) M2 H7 C/ D
- SOCKADDR_IN clientaddr;6 W0 x- F% X: P
- WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口7 K* d2 A9 H$ F7 y i* Q! f
- sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket7 e* o: q( c" H: l
- + O: q% S* m/ U
- ) M2 U4 v8 [" ^& z; ^- t0 t
- if (sockServer != -1 && sockServer != INVALID_SOCKET){
. [) v3 n$ J" r# S, _ - printf("Socket has been created :%d", sockServer);5 K9 h3 w7 y' ?" J7 G- A
- }, m# w1 y& L. P6 {4 b
- else{
. j( ]# U! V* Z E8 J% z - printf("Socket create failed.");5 {; e9 h8 Y1 w `" `/ O
- exit(0);
% |- W: h% a5 X/ f - }
% }5 Y2 t$ I3 s- R) m1 S0 ?9 ` - serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
. M. b- A9 k8 M! { q% M - serveraddr.sin_family = AF_INET;
' A& d& d3 _, B, {3 s$ C - serveraddr.sin_port = htons(6000);//绑定端口6000
1 N# _0 L/ Y' I* ~, C+ f) R- D - int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));) j# l. A, k* _/ K, d, r
- char recvBuf[100];
5 }+ ?( N5 f* ]0 g - int len = sizeof(SOCKADDR);. q$ p" W. }* c. l
- listen(sockServer, 5);//5为等待连接数
4 {. m! g) G% _" H/ n - while (1){: |" o* q: X" _+ w& }9 p
- sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);. k+ D0 ~) }! F8 q
- //接收客户端数据 a5 ~, f+ G( P; h6 y& S3 x
- recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);
+ t0 o; f2 t9 z) h. ~ - printf("to me:%s\n",recvBuf);
: w% A+ ]+ ~; g - memset(recvBuf, 0, 100);/ a% F/ q2 |8 @/ s6 _2 k
- }' u! S9 n8 f& X1 b+ X5 H
- closesocket(sockClient);$ U) j4 i) e# S7 B$ Y( k- i7 |
- system("pause");- R8 V1 S+ Z1 I! Z0 R$ u
- return 0; ]5 Q1 w; |: z9 y
- }
复制代码 客户端代码:
' a$ H$ w+ b9 U* |& w- #include<winsock2.h>
+ Y) [2 B9 k3 H2 q0 J - #include<stdio.h>1 {7 g, c/ A( I; T
- #pragma comment(lib, "ws2_32.lib")( d" d! k( s( I8 F6 M
- void main()
& Q* K6 T4 I. T# [ - {
/ ? M" ?2 Y) k5 J' }: s" l2 T - WSADATA wsaData;; N4 Q. U3 K' z. B
- SOCKET sockClient;//客户端Socket
" u& C" x: X0 M2 ~6 k: T - SOCKADDR_IN addrServer;//服务端地址
$ P5 u4 R9 [4 {. w6 ?% f - WSAStartup(MAKEWORD(2, 2), &wsaData);2 I; f( L6 ^# B9 [
- char message[20] = "HelloSocket!";/ q) `4 K: y# b& {+ Z
- //定义要连接的服务端地址: |$ Z6 K- G5 m4 O# }- Q
- addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)
! F2 ?2 S# {8 m% w6 ~" D1 X - addrServer.sin_family = AF_INET;
4 s7 D; \9 G9 B! c - addrServer.sin_port = htons(6000);//连接端口6000
, Z2 w3 }$ }* x! z; l/ d - //新建客户端socket, g9 T& J8 h, c$ T
- sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);* g+ Z( D. H2 e1 T7 a
- int s = 0;( }' E8 N! R6 r9 K0 A6 Y8 D% u/ R
- s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));& ]" r3 S9 Q' H# O* T+ J/ j
7 e+ t" f) f4 l2 O9 u; p- while (1){+ b9 Y. s* u8 m3 B) k7 S7 j
- //发送数据
6 n1 c. G- N. e" o4 a( L/ }) X - int a = send(sockClient, message, strlen(message) + 1, 0);
2 K8 K. X/ j; x6 \, F2 m( P$ I - printf("to server:");0 P! _' w( B! m6 c# o6 n
- scanf("%s", message);8 X4 f9 W5 [' _1 h' a2 X1 Q9 R
8 m0 P. P9 A2 A+ g( h- }) L# g/ {. P8 G9 e* Z4 |2 H, ^4 w
- //关闭socket3 Z. u; d# S8 s) ]1 U
- closesocket(sockClient);* p- Z0 Z" N# w2 E( h% d
- WSACleanup();- z4 H0 N" m4 c) b+ S# w
- }
复制代码 求懂的高手来解答一下。5 N) l9 a" m8 U, c
谢谢了!$ D+ s+ V8 p1 ]$ l! @5 ~9 h
+ G$ x8 K' _0 L! _
) k# E0 T3 O6 \- l4 U7 e7 s: _7 Q
- {; r7 E" N- l |
|