管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
大家好,感谢你的回复。- q$ E4 J3 A3 ]* M. Z
我用c 写了一个socket通信的小程序,写好了服务端和客户端,可遇到个问题,就是每次启动客户端只能发送第一条消息,之后服务端就不能再收到消息了。1 l- e2 z3 ?+ x& h9 |% |, w
Talk is cheak , show me the code.8 [) d1 U/ r% F( t7 \( b
服务端代码:) D/ S. J( g4 J1 c0 U1 E! z
- #include<stdlib.h>- W U* a3 l3 {$ f Z" T, L+ ^
- #include<WinSock2.h>
4 d$ _3 t; x7 ^ G - #pragma comment(lib,"ws2_32.lib")# S5 L1 ^ ~6 t g
- int main(){# {- O9 m: G# c! p% }+ s# S9 Q, p
- WSADATA wsd;: ?% q7 P: `+ X% \
- SOCKET sockServer;* l7 Y* o4 ]. T, p8 _4 Y8 ~9 n2 ?
- SOCKADDR_IN serveraddr;// 服务端套接字 该结构中包含了要结合的地址和端口号, D1 q4 _0 r# K
- SOCKET sockClient;8 Z& e- s, P2 u, Q8 N, w! a: C3 e
- SOCKADDR_IN clientaddr;9 @9 y, e; r+ y& ?* S @. Y
- WSAStartup(MAKEWORD(2,2),&wsd);//初始化网络接口- ?5 G5 D8 @) I0 N- C- O
- sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建服务器socket
. y( s( M* U1 Q. v; r$ S7 U- q- x' d - % V5 @5 g- v- y) i$ ^, d# ~$ ?
* ^; i9 i, C: q: L. n- [( _& v- if (sockServer != -1 && sockServer != INVALID_SOCKET){
' m- Q0 H" D2 R' k: [7 Y - printf("Socket has been created :%d", sockServer);
}, r# [1 m+ F. r) l - }# x0 l3 l! Z3 N: C
- else{9 Y3 z. x. F. l! u) ~
- printf("Socket create failed.");
: a: j% e! _% `* @' I: O6 Q6 z7 @ - exit(0);
, T" i! e4 ^& M# v' j! V; O; A$ F - }
/ E9 l# W: N$ o# @& }0 F - serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);; }1 ^# Q! {9 X' {' ]
- serveraddr.sin_family = AF_INET;
4 P/ Z+ O. U" K& q - serveraddr.sin_port = htons(6000);//绑定端口6000) T4 b) z; R: R% @3 P% S
- int bindInfo = bind(sockServer, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
! ^1 q, p, C3 M( M$ O& F( }( ^9 V - char recvBuf[100];" E1 j9 ?4 [8 G* C( W/ f
- int len = sizeof(SOCKADDR);
Z0 v. `% F! @, f/ A1 \! L - listen(sockServer, 5);//5为等待连接数2 ^- X- R+ U; \, p& s; J
- while (1){ l- \) x3 x. L. ?
- sockClient = accept(sockServer, (SOCKADDR*)&clientaddr, &len);" ]/ [$ \- g3 |# c
- //接收客户端数据/ ?# V* s# N- `" R, n
- recv(sockClient, recvBuf, strlen(recvBuf)+1, MSG_PEEK);9 k* @( r: e$ w K5 S) m3 i! W" ]
- printf("to me:%s\n",recvBuf);
0 G5 M3 w+ M. t2 r - memset(recvBuf, 0, 100);0 g) m( x; A" C" m
- }- D! P$ g+ r2 ?
- closesocket(sockClient);9 g! r" ]# k! F8 J/ E- N
- system("pause");, W3 N7 x; j; n1 k. C
- return 0;/ J: r5 w& R- R3 s P4 L
- }
复制代码 客户端代码:
/ Q1 `2 ]* u) d- e- #include<winsock2.h>
& N X' m( q: o: Y: a - #include<stdio.h>
+ G. z4 k& z4 ^6 _3 \1 R - #pragma comment(lib, "ws2_32.lib")4 g+ E, [- Q/ p$ J; \
- void main()
) |9 _7 t! j4 L5 M& g: h - {: g, g+ i+ H4 q( `5 Y# }
- WSADATA wsaData;8 m* Q6 ^" z' L: s% m
- SOCKET sockClient;//客户端Socket
, a o- J V5 o8 G% v - SOCKADDR_IN addrServer;//服务端地址% \; ?' |5 _3 v% q) n" P' ?( Y: [
- WSAStartup(MAKEWORD(2, 2), &wsaData);
0 y Q4 n1 ?# m9 H# M7 ] - char message[20] = "HelloSocket!";7 ^+ {: b7 G6 K; c# n" E' u2 W
- //定义要连接的服务端地址
N# y0 n7 @" h8 W0 ?1 \0 Q- E+ u. I - addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//目标IP(127.0.0.1是回送地址)
0 |9 ^ ?" q. u- ?. G/ n - addrServer.sin_family = AF_INET;' h% K% ?# ]. K& G) [: p
- addrServer.sin_port = htons(6000);//连接端口6000
. e8 K2 B) e/ T# C' a/ W - //新建客户端socket% Z4 j9 {3 ^. ~! X/ f) ^
- sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);% G5 }1 _( Z' r" N6 k9 B& d2 Q
- int s = 0;
3 c3 o) E# p! r% k1 R9 c7 | - s = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR));, w: u, ^$ }/ u; l/ d S2 ~# A
- h7 I3 n+ g3 X# }
- while (1){
! |* T( R$ _9 y4 C3 o - //发送数据
3 _9 l: q% q" A0 \8 W - int a = send(sockClient, message, strlen(message) + 1, 0);, t3 P$ d" g7 T% P6 q' Z
- printf("to server:");' i ~2 m, r i1 _
- scanf("%s", message);1 C# h. I" v) u1 I
# s. I" _8 N$ L; k) {4 \( G5 g2 J+ C- }
* f! I0 Q4 b/ d' K0 |4 I7 s1 W - //关闭socket4 _0 o3 f: f# m* X* {
- closesocket(sockClient);& Z; L' {3 y- H2 j! S
- WSACleanup();
) N! B) g# X1 k: B5 B% i - }
复制代码 求懂的高手来解答一下。! |# N0 `. h3 Q( Z
谢谢了!& h/ G5 p; ]' ^! d8 e" x/ `% A
9 J2 T9 l% N' \# M# [0 _" C
: e0 M9 K* J, b- @2 |) k4 V/ W3 p5 N, y' }1 J# W. ]8 O5 w7 h
|
|