網絡編(bian)程實驗一(yi)-TCP通信
時間:2018-07-30 來源:未知
網絡通信實驗
1.1 TCP通信
【實驗目的】
熟練掌握tcp服務器與客(ke)戶端的搭(da)建(jian)以(yi)及(ji)tcp通信(xin)的特點。
【實驗內容】
本實(shi)驗通過一個簡單(dan)的tcp服務(wu)器端,接收客戶端的連接請求,并發送(song)歡迎信息。
【實驗內容】
服務器(qi)程序代碼:
#include
#include /* See NOTES */
#include
#include
#include
#include
#include
#define backlog 1024
int main(void)
{
int listenfd;
int ret;
struct sockaddr_in addr;
bzero(&addr,sizeof(addr));
addr.sin_family=PF_INET;
addr.sin_port = htons(8888);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
listenfd = socket(PF_INET,SOCK_STREAM,0);
if(listenfd==-1)
{
perror("socket");
exit(EXIT_FAILURE);
}
ret = bind(listenfd, (struct sockaddr *)&addr,sizeof(addr));
if(ret==-1)
{
perror("bind");
exit(EXIT_FAILURE);
}
listen(listenfd,backlog);
int connfd = accept(listenfd,NULL,NULL);
printf("connect a client !\n");
char buf[1024];
while(1)
{
// usleep(10);
bzero(buf,sizeof(buf));
ret = recv(connfd,buf,sizeof(buf),0);
if(ret ==-1)
{
perror("recv");
exit(EXIT_FAILURE);
}
else if(ret == 0)
{
printf("client quit\n");
break;
}
else
{
printf("recv %d bytes,buf is %s\n",ret,buf);
}
}
close(connfd);
close(listenfd);
return 0;
}
客戶端程序代碼:
#include
#include /* See NOTES */
#include
#include
#include
#include
#include
#include
int main(void)
{
int client_fd;
int ret;
client_fd = socket(PF_INET,SOCK_STREAM,0);
if(client_fd == -1)
{
perror("socket");
exit(EXIT_FAILURE);
}
struct sockaddr_in sevaddr;
sevaddr.sin_family = PF_INET;
sevaddr.sin_port = htons(8888);
sevaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
ret = connect(client_fd,(struct sockaddr *)&sevaddr,sizeof(sevaddr));
if(ret ==-1)
{
perror("connect");
exit(EXIT_FAILURE);
}
char buf[1024];
strcpy(buf,"hello");
int i;
for(i=0;i<20;i++)
{
send(client_fd,"world",5,0);
send(client_fd,"hello",5,0);
}
close(client_fd);
return 0;
}
【實驗步(bu)驟】
1. 編譯后(hou)運行(xing)服(fu)務器(qi)程(cheng)序(xu)與客(ke)戶(hu)端程(cheng)序(xu),查看結果
2. 修改服務(wu)器程序,解開(kai)注(zhu)釋(shi)(// usleep(10)) 編譯(yi)后運行(xing),試分析(xi)結果,
3. 對于粘包(bao)問題,如何解決。
4. 思考題:tcp客(ke)戶端一次發送40960字節。tcp服務器端一次能接受完嗎?發送較大數據的時候應該注意什么問題。
發送大文件時:
1.先發文件大小
2.再發文(wen)件數據