- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验9 网编程-TCP
实验
实验目的:
实验要求:
熟练使用该节所介绍
实验器材:
软件:
1.安装了的vmware虚拟机
硬件:PC机一台
实验步骤:
首先配置Ubunt的网络,使其与Window的IP地址在同一网段。网络配置方法如下:
修改配置文件
sudo vi /etc/network/interfaces修改如下:
auto lo
iface lo inet loopback
auto eth0
#iface eth0 inet static
#address 192.168.X.X //修改IP地址为Windows IP地址+100
#gateway 192.168.X.X//修改 为 Window 的网关
#netmask
重启网络管理器
sudo service network-manager restart
重启网络服务:
sudo /etc/init.d/networking force-reload == 重新加载网路配置文件
sudo /etc/init.d/networking restart
根据所学的TCP协议,服务器端和客户端进行通信的创建流程,实现客户端发送据到服务器端,服务器端接收数据。并将服务器端程序和客户端程序在两台电脑上进行运行演示。
服务器端的创建流程为 :
各个函数的使用方法参考实验文件夹下的 《嵌入式Linux网络编程.pdf》。
下面代码是设置socket可重绑定:
//Set Sockopt
int sinsize = 1;
int ret = setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, sinsize, sizeof(int));
if(ret != 0)
{
perror(Set sockopt fail!\n);
exit -1;
}
server.c的参考代码如下:
#includearpa/inet.h
修改上题代码用线程实现客户端和服务器端可以重复收发数据,模拟聊天。
其中server.c的参考代码如下:
#include sys/types.h
#includesys/socket.h
#includestdio.h
#includestring.h
#includenetinet/in.h
#include unistd.h
#include stdlib.h
#include pthread.h
#includearpa/inet.h
#define PORT 6000
#define SERVER_IP 01
void *routine(void * arg)
{
int newsockfd=*(int *) arg;
char buf[10];
while(1)
{
bzero(buf,10);
int size=recv(newsockfd,buf,sizeof(buf),0);
buf[size]=\0;
printf(recive from client is : %s,buf);
}
}
int main()
{
char buf[10]=hello;
//bzero(buf,10);
int sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd0)
{
perror(socket fail\n);
return -1;
}
//Set Sockopt
int sinsize = 1;
int ret = setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, sinsize, sizeof(int));
if(ret != 0)
{
perror(Set sockopt fail!\n);
exit -1;
}
struct sockaddr_in s;
memset(s,0,sizeof(s));
s.sin_family=AF_INET;
s.sin_port=htons(6000);
s.sin_addr.s_addr=inet_addr(01);//要求大端模式的端口号和IP地址
int bi=bind(sockfd,(struct sockaddr *)s,sizeof(struct sockaddr));
if(bi0)
{
perror(bind fail\n);
}
listen(sockfd,5);
struct sockaddr_in c;
int size=s
文档评论(0)