一、实验目的和任务
- 本实验要求复习ubuntu的IP配置知识。
- 掌握虚拟机桥接设置方法。
- 了解使用socket编程的TCP流程。
二、实验设备介绍
1.软件需求: win7操作系统,VMware workstation,ubuntu12 [配置交叉编译环境]。
2.硬件需求: PC内存大于1G,硬盘空间大于20G;smart210开发板。
三、注意事项和要求
1.启动虚拟机前应首先使用"虚拟网络编辑器"配置要桥接的网卡。
2.检查网线是否连接正常。
3.注意区分TCP服务端监听与通信的socket对象。
4.调试程序时需要两个程序同时运行进行联调。
四、实验内容和步骤
4.1简单的TCP服务端与客户端通讯
TCP通讯模式如下图所示,服务端具有负责监听的socket,当客户端有连接请求时,服务端创建一个新的socket对象,与客户端socket形成配对关系,然后执行数据的相互发送,当双方需要断开时,通过调用shutdown方法实现稳妥断开。TCP是网络中最常用的面向连接的网络层协议,HTTP、FTP等协议就是基于TCP协议的应用层协议。
TCP中服务端与客户端的Socket资源配对关系
下面采用TCP通讯的客户端hello_client.c与服务端hello_server.c程序实现一次网络信息的发送和接收,请仔细阅读程序,理解TCP通读中socket各方法的使用。TCP使用bind方法时,指定的绑定IP地址为本机IP,如果赋值为INADDR_ANY,那么系统将绑定默认的网卡【默认的IP地址】
4.1.1客户端代码hello_client.c
TCP客户端主要使用的方法有socket,connect,send,receive,shutdown,close。
//025.c TCP客户端hello程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
void error_handling(char * message);
int main(int argc,char *argv[])
{
int sock;
struct sockaddr_in serv_addr;
char message[30];
int str_len;
//命令 IP PORT
if(argc!=3)
{
printf("Usage :%s <IP> <PORT>\n",argv[0]);
exit(1);
}
sock=socket(PF_INET,SOCK_STREAM,0);
if(sock==-1)
error_handling("socket() create failed.");
memset(&serv_addr,0,sizeof(serv_addr));
serv_addr.sin_family=AF_INET;
//IP地址
serv_addr.sin_addr.s_addr=inet_addr(argv[1]);
//PORT
serv_addr.sin_port=htons(atoi(argv[2]));
if(connect(sock,(struct sockaddr *)&serv_addr,sizeof(serv_addr))==-1)
error_handling("connect() failed.");
str_len=read(sock,message,sizeof(message)-1);
if(str_len==-1)
error_handling("read() failed.");
printf("Message from server: %s\n",message);
shutdown(sock,SHUT_RDWR);
close(sock);
return 0;
}
//错误处理是将信息输出到标准输出,然后退出进程。
void error_handling(char * message)
{
fputs(message,stderr);
fputc(