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