c语言接受socket发送尾部有乱码,C语言socket编程,服务器和一个客户端连接时,服务器能正常收到信息,2个以上就出现BUG了...
新手剛剛接觸這個,建立的是控制臺的32位程序。
程序思路服務器監聽,每次連接,創建一個進程,全權處理該客戶端的通信(不用考慮資源浪費問題)。
服務器監聽部分:
while (true)
{
sockConn = accept(sockSrv, (SOCKADDR*)&addrClient, &len);//每次有連接生成SOCKET
mj.sk = sockConn;//mj只是定義的一個結構變量,用來傳遞2個參數給新進程
mj.numb = n;//
_beginthread(process, 0, &mj);//生成新進程并且傳遞SOCKET給新線程
n++;//統計進程數,也就是客戶端的序號
}
處理部分:
void process(void *lp)
{
Soksk *p = (Soksk*)lp;
SKT[p->numb].sk = p->sk;//SKT是全局變量用來保存不同客戶端的SOCEKT,
char rcbf[50];
send(p->sk, "您已成功連接", 13, 0);//告訴客戶端已經連接
while (1){
for (int i = 0; i < 50; i++) rcbf[i] = '\0';
if(recv(p->sk, rcbf, 50, 0)!=SOCKET_ERROR);//接受客戶端消息,目測問題最大的地方、
printf("本次收到%s,from socket=%d",rcbf,p->sk);
}
客戶端就是簡單的發送了
while(1){
gets(sdbuf);
send(sockClient,sdbuf,49,0);
}
}
故障表現
1,就是一個客戶端的時候發一個消息,RECV收到2次,另一個亂碼,但至少不會丟失,每次都能收到。
2,2個以上客戶端時出現,經常出現A發送不能收到,B發送一下,B的收到,A的也收到了,但B不發,A的消息永遠不會收到。有時候B發了A的也收不到,然后亂按幾下可能就是B的收不到,A的能收到了。
我的問題是:
1丶如何解決以上故障,再幫忙改個程序(本人用的VS2013)
2丶是因為客戶端只有一個接受端口,或者緩沖區?影響了數據傳輸?,不應該啊,
3丶A發送消息服務器沒收到。RECV依舊在阻塞狀態,B一發送怎么A給收到了,不同線程下緩存文件不是不共享么,為什么2個客戶端就會出現這個情況。
4丶希望越詳細越好。
君之大恩,不勝感激!
總結
以上是生活随笔為你收集整理的c语言接受socket发送尾部有乱码,C语言socket编程,服务器和一个客户端连接时,服务器能正常收到信息,2个以上就出现BUG了...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言编程单向链表排序,【分享】C语言
- 下一篇: c语言中0xde 这怎么用,为什么使用0