本**主要有一下幾個技術的解決方案:
埠復用技術
防止tcp流協議粘包:我們使用的是指定buf大小的方式
#include #include #include #include #include #include #include #include #include #define err_exit(m) \
do \
while(0)
struct packet
;//1一次全部讀走 //2次讀完資料 //出錯分析 //對方已關閉
//思想:tcpip是流協議,不能保證1次讀操作,能全部把報文讀走,所以要迴圈讀指定長度的資料。
//判斷返回值的方法時 如果返回值小於要讀取的位元組個數,說明對方連線已關閉
ssize_t readn(int fd, void *buf, size_t count)
else if (nread == 0) //若對方已關閉
return count - nleft;
bufp += nread;
nleft -= nread;
} return count;
}//1一次全部讀走 //2次讀完資料 //出錯分析 //對方已關閉
//思想:tcpip是流協議,不能1次把指定長度資料,全部寫完
//該函式判斷返回值是否等於-1來進一步處理
ssize_t writen(int fd, const void *buf, size_t count)
else if (nwritten == 0)
continue;
bufp += nwritten;
nleft -= nwritten;
} return count;
}void do_service(int conn)
n = ntohl(recvbuf.len);
ret = readn(conn, recvbuf.buf, n); //根據長度讀資料
if (ret == -1)
err_exit("read");
else if (ret < n)
fputs(recvbuf.buf, stdout);
writen(conn, &recvbuf, 4+n); //注意寫資料的時候,多加4個位元組 }}
int main(void)
else
close(conn); }
return 0;
}
#include #include #include #include #include #include #include #include #include #define err_exit(m) \
do \
while(0)
struct packet
;ssize_t readn(int fd, void *buf, size_t count)
else if (nread == 0)
return count - nleft;
bufp += nread;
nleft -= nread;
}return count;
}ssize_t writen(int fd, const void *buf, size_t count)
else if (nwritten == 0)
continue;
bufp += nwritten;
nleft -= nwritten;
}return count;
}int main(void)
n = ntohl(recvbuf.len);
ret = readn(sock, recvbuf.buf, n);
if (ret == -1)
err_exit("read");
else if (ret < n)
fputs(recvbuf.buf, stdout);
memset(&sendbuf, 0, sizeof(sendbuf));
memset(&recvbuf, 0, sizeof(recvbuf));
} close(sock);
return 0;
}
簡單的TCP連線Server和Client
我們的一款unity開發的遊戲,之前一直在android上測試,這幾天我做了遊戲的windows phone 8版本匯出工作,經過一周摸索,終於成功打出了可以在wp8手機上正常執行的版本。wp8的.net庫是silverlight的乙個子集,很多.net 2.0的語法它不支援,socket的很多屬性...
epoll例程 簡單的server和client
客戶端從標準輸入讀入一行,傳送到服務端 服務端從網路讀取一行,然後輸出到客戶端 客戶端收到服務端的響應,輸出這一行到標準輸出 如下 include include basic system data types include basic socket definitions include in....
最簡單client和server通訊程式
開兩個vc或者建兩個工程,先執行server再執行client server端 include include pragma comment lib,ws2 32.lib void main else socket sersocket socket af inet,sock stream,0 建立了...