Linux平台的Socket基础应用-TCP通信程序

一、实验目的和任务

  1. 本实验要求复习ubuntu的IP配置知识。
  2. 掌握虚拟机桥接设置方法。
  3. 了解使用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通讯模式
在这里插入图片描述
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,
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值