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

📄 client.c

📁 linux socket 接受和发送整型数
💻 C
字号:
#include <sys/types.h>
#include <unistd.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <sys/socket.h>
#include <errno.h>
/*
这是客户端程序,输入服务器的IP,连接服务器的8003端口,
就可以从服务器得到数据了。
*/
#define SERVER_PORT 8003
void recv_seq(int sockfd,int *data)
{
	int temp;
	read(sockfd,&temp,sizeof(int));
	*data=ntohs(temp);
}

int main(int argc,char *argv[])
{
	int sockfd;
	struct sockaddr_in server_addr;
	int ret;
	int i;
	int seq_data;
	/*
	这个结构是用于将输入的IP地址转换称为机器名
	*/
	struct hostent *host;
	if(argc!=2)
	{
		printf("Usage:%s servname\n",argv[0]);
		exit(1);
	}
	/*
	打开一个套接字,属于连接型的,用于三次握手
	*/
	sockfd=socket(PF_INET,SOCK_STREAM,0);
	if(sockfd<0)
	{
		fprintf(stderr,"Open socket error!\n");
		exit(2);
	}
	/*
	根据输入的IP名,取得host结构
	*/
	if(!(host=gethostbyname(argv[1])))
	{
		fprintf(stderr,"gethostname error!");
		exit(3);
	}
	printf("host ent :%s,%s\n",host->h_name,host->h_addr);
	/*
	  *将server_addr清空
	  */
	bzero(&server_addr,sizeof(server_addr));
	server_addr.sin_family=PF_INET;
	server_addr.sin_port=htons(SERVER_PORT);
	/*
	字节复制,将第一个参数第三个参数长度到第二个参数
	sr
	dst
	len
	*/
	bcopy(host->h_addr,&server_addr.sin_addr,host->h_length);
	/*
	  * 连接这个服务器,进行三次握手
	  返回一个连接描述符
  	*/
	ret=connect(sockfd,&server_addr,sizeof(server_addr));
	if(ret<0)
	{
		fprintf(stderr,"connect error!\n");
		exit(4);
	}
	/*
	从这个描述符里面取数据。
	  */

	for(i=1;i<=100;i++)
	{
		recv_seq(sockfd,&seq_data);
		printf("from the server:%d\n",seq_data);
	}
	close(sockfd);
}

⌨️ 快捷键说明

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