⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.c

📁 linux socket 接受和发送整型数
💻 C
字号:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <errno.h>

/*
服务端程序,用于侦听8003端口,如果有连接这个端口
则,向这个端口发送100个整形数。
*/
#define SERVER_PORT 8003

void send_seq(int sockfd,int *data,int num_bytes)
{
/*
记住,发送数据的时候,也要进行顺序转换
*/
	int net_data;
	net_data=htons(*data);
	write(sockfd,&net_data,num_bytes);
}

int main()
{
	int sockfd;
	int connfd;
	int seq_data;
	int namelen;
/*
用于存放服务器或者本机的信息,ip和端口
*/
	struct sockaddr_in server_addr;
/*
打开一个socket,第一个参数,是指TCP/IP,第二个参数,指明这是
套接字流,第三个,一般不指明,默认为0
*/	
	sockfd=socket(PF_INET,SOCK_STREAM,0);
	if(sockfd < 0)
	{
		fprintf(stderr,"socket error!\n");
		exit(1);
	}
/*
对这个结构体赋值,主要有三个地方要赋值,
一个是地址类型
之后,是IP,用INADDR_ANY,指出,使用本机IP
三,是服务器,监听的端口
后两个参数都要进行顺序转换
*/	
	server_addr.sin_family=PF_INET;
	server_addr.sin_addr.s_addr=INADDR_ANY;
	server_addr.sin_port=htons(SERVER_PORT);
/*
将信息绑定到这个这个套接字描述符
*/
	if(bind(sockfd,&server_addr,sizeof(server_addr))<0)
	{
		perror("bind error!\n");
		fprintf(stderr,"bind error!\n");
		exit(2);
	}
	
/*
开始监听,监听队列是2个,如果没有链接,则一直阻塞下去
*/
	if(listen(sockfd,2)<0)
	{
		fprintf(stderr,"listen error !\n");
		exit(3);
	}
/*
有连接进来了。
*/
	namelen=sizeof(server_addr);
/*
从倾听套接字的完成连接队列中接收一个连接,返回描述符
*/
	connfd=accept(sockfd,&server_addr,&namelen);
	if(connfd<0)
	{
		fprintf(stderr,"connect fd error!\n");
		exit(4);
	}

/*
取出这个连接描述符,然后朝这个描述符发送数据
*/
	for(seq_data=1;seq_data<=100;seq_data++)
	{
		send_seq(connfd,&seq_data,sizeof(int));
	}
	close(connfd);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -