2023/08/28 网络编程 day2

TCP客户端

#include 
#define PORT 8880  //端口号,范围1024-49151
#define IP "192.168.114.39"  //本机IP,ifconfig
int main(int argc, const char *argv[])
{
	//创建流式套接字 socket
	int cfd; //定义服务器文件描述符
	if((cfd = socket(AF_INET,SOCK_STREAM,0))<0)
	{
		ERR_MSG("socket");
		return -1;
	}
	printf("socket create success cfd=%d\n",cfd);
	//绑定客户端的地址信息---》非必要绑定
	//当不手动绑定的时候,操作系统会自动给客户端绑定本机IP和随机端口
	//填充服务器的地址信息结构体给connect函数连接
	//真实的地址信息结构体根据地址族指定 AF_INET:man 7 ip
	struct sockaddr_in sin;
	sin.sin_family 		= AF_INET; //必须填AF_INET;
	sin.sin_port   		= htons(PORT); //服务器绑定的端口号
	sin.sin_addr.s_addr = inet_addr(IP); //服务器绑定的IP
	//连接指定服务器 connect
	if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))<0)
	{
		ERR_MSG("connect error");
		return -1;
	}
	char buf[128];
	int ret =0;
	while(1)
	{
		//清空字符串
		bzero(buf,sizeof(buf));  //memset
		printf("请输入>>");
		fgets(buf,sizeof(buf),stdin); //从终端获取字符串
		buf[strlen(buf)-1] == '\0';  //将最后的'\n'替换成'\0'
		//发送
		if(send(cfd,buf,sizeof(buf),0)<0)
		{
			ERR_MSG("send error");
			return -1;
		}
		printf("send success\n");
		//清空字符串
		bzero(buf,sizeof(buf));  
		//接收
		if((ret = recv(cfd,buf,sizeof(buf),0))<0)
		{
			ERR_MSG("recv error");
			return -1;
		}
		else if(ret ==0)
		{
			printf("服务器下线 cfd = %d\n",cfd);
			break;
		}
		printf("%s\n",buf);
	
	}
	//关闭文件描述符
	if(close(cfd)<0)
	{
		ERR_MSG("close");
		return -1;
	}
	return 0;
}

UDP的客户端

#include 
#define PORT 9527 				//端口号,范围1024-49151 
#define IP "192.168.114.39"  	//机IP
int main(int argc, const char *argv[])
{
	//创建报式套接字文件
	int cfd;
	if((cfd = socket(AF_INET,SOCK_DGRAM,0))<0)
	{
		ERR_MSG("socket create error");
		return -1;
	}
	printf("socket create success cfd = %d\n",cfd);
	struct sockaddr_in sin;
	sin.sin_family 			= AF_INET;   //协议族
	sin.sin_port 			= htons(PORT);  //本机字节序转网络字节序
	sin.sin_addr.s_addr 	=inet_addr(IP);  //本机IP
	//定义一个搬运工
	char buf[128] ="";
	//目标地址
	//发送数据的长度
	socklen_t addrlen = sizeof(sin);
	int ret =0;
	while(1)
	{
		//清空字符串
		bzero(buf,sizeof(buf));
		printf("请输入>>>");
		fgets(buf,sizeof(buf),stdin);
		buf[strlen(buf)-1] =='\0';
		//发送数据
		if(sendto(cfd,buf,sizeof(buf),0,(struct sockaddr *)&sin,sizeof(sin))<0)
		{
			ERR_MSG("sendto error");
			return -1;
		}
		printf("sendto success\n");
			
		//接收数据
		bzero(buf,sizeof(buf));
		if(( ret = recvfrom(cfd,buf,sizeof(buf),0,(struct sockaddr *)&sin,&addrlen))<0)
		{
			ERR_MSG("recvfrom error");
			return -1;
		}
		if(ret ==0)
		{
			printf("服务器下线cfd = %d\n",cfd);
		}
		printf("%s\n",buf);
	}
	//关闭套接字
	close(cfd);
	return 0;
}

2023/08/28 网络编程 day2_第1张图片

 

你可能感兴趣的:(网络,linux,ubuntu,c语言)