当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 学习笔记 > 网络编程实验一-TCP通信

网络编程实验一-TCP通信 时间:2018-07-30      来源:未知

网络通信实验

1.1 TCP通信

【实验目的】

熟练掌握tcp服务器与客户端的搭建以及tcp通信的特点。

【实验内容】

本实验通过一个简单的tcp服务器端,接收客户端的连接请求,并发送欢迎信息。

【实验内容】

服务器程序代码:

#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;

}

【实验步骤】

1. 编译后运行服务器程序与客户端程序,查看结果

2. 修改服务器程序,解开注释(// usleep(10)) 编译后运行,试分析结果,

3. 对于粘包问题,如何解决。

4. 思考题:tcp客户端一次发送40960字节。tcp服务器端一次能接受完吗?发送较大数据的时候应该注意什么问题。

发送大文件时:

1.先发文件大小

2.再发文件数据

上一篇:sqlite3数据库常用指令及函数接口介绍

下一篇:c++运算符重载学习总结

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部