用网络编程中socket编写服务器与客户端程序(UDP)

        UDP也是传输层协议,它是无连接的,不可靠的传输服务.当接收数据时它不向发送方提供确认信息,它不提供输入包的顺序,如果出现丢失包或重份包的情况,也不会向发送方发出差错报文.由于它执行功能时具有较低的开销,因而执行速度比TCP快。

        基于UDP服务器:

1.创建一个socket,用函数socket()

2.绑定IP地址、端口等信息到socket上,用函数bind()

3.循环接收数据,用函数recvfrom()

4.关闭网络连接。

#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include<stdlib.h>
#include<pthread.h>
#define PORT 8000 //端口号
int main()
{
	int sockfd;
	char buf[32]={0};	
	struct sockaddr_in server_addr;
	struct sockaddr_in client_addr;	
	sockfd=socket(PF_INET,SOCK_DGRAM,0);
	if(-1==sockfd)
	{
		perror("socket");
		exit(1);
	}
	memset(&server_addr,0,sizeof(server_addr));//初始化server_addr
	server_addr.sin_family=PF_INET;//PF_INET 地址族
	server_addr.sin_port= PORT;   //端口号
	server_addr.sin_addr.s_addr=inet_addr("127.0.0.1");  //127.0.0.1为本机回环地址
	int length=sizeof(server_addr);
	int ret=bind(sockfd,(struct sockaddr *)&server_addr,length);
	if(-1==ret)    //如果绑定失败
	{
		perror("bind");
		exit(1);
	}
	while(1)
	{
		length=sizeof(client_addr);
		ret=recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr *)&client_addr,&length);
		if(-1==ret)   //如果接收失败
		{
			perror("recvfrom");
			exit(1);
		}
		printf("recv %s from %d \n",buf,client_addr.sin_port);
		memset(buf,0,sizeof(buf)); //清空buf里的内容
	}
	return 0;
}

        基于UDP客户端

1.创建一个socket,用函数socket()

2.绑定IP地址、端口等信息到socket上,用函数bind()

3.设置对方的IP地址和端口等属性

4.发送数据,用函数sendto()

5.关闭网络连接 

#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include<stdlib.h>
#include<pthread.h>

#define PORT 8000  //端口号

int main()
{
	int ret;
	char buf[32]={0};
	struct sockaddr_in server_addr;
	int sockfd=socket(PF_INET,SOCK_DGRAM,0);
	if(-1==sockfd)   //如果socket创建失败
	{
		perror("socket");
		exit(1);
	}	
	server_addr.sin_family=PF_INET;//PF_INET 地址族
	server_addr.sin_port= PORT;   //端口号
	server_addr.sin_addr.s_addr=inet_addr("127.0.0.1");  //127.0.0.1为本机回环地址	
	while(1)
	{
		memset(buf,0,sizeof(buf));   //初始化buf
		scanf("%s",buf);
		ret=sendto(sockfd,buf,strlen(buf),0,(struct sockaddr *)&server_addr,sizeof(server_addr));
		if(-1==ret)   //如果发送失败
		{
			perror("sendto");
		}
	}
	return 0;
}

运行结果:

猜你喜欢

转载自blog.csdn.net/mmmmmmyy/article/details/81451451