linux学习:socket编程

linux中套接字编程语句和windows下的差不多

1、服务器端

/*
 ============================================================================
 Name        : Test.c
 Author      : wangchuan
 Version     :
 Copyright   : Your copyright notice
 Description : Hello World in C, Ansi-style
 ============================================================================
 */

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

int main()
{
	int server_sockfd,client_sockfd;
	int server_len,client_len;
	struct sockaddr_in server_address;
	struct sockaddr_in client_address;

	server_sockfd=socket(AF_INET,SOCK_STREAM,0);
	server_address.sin_family=AF_INET;
	server_address.sin_addr.s_addr=inet_addr("127.0.0.1");
	server_address.sin_port=9734;
	server_len=sizeof(server_address);

	bind(server_sockfd,(struct sockaddr *)&server_address,server_len);
	listen(server_sockfd,5);

	while(1){
		char ch;
		printf("服务器等待消息\n");
		client_sockfd=accept(server_sockfd,
				(struct sockaddr *)&client_address,
				(socklen_t *__restrict)&client_len);
		read(client_sockfd,&ch,1);
		ch++;
		write(client_sockfd,&ch,1);
		close(client_sockfd);
	}
	return 0;
}


2、客户端

/*
 ============================================================================
 Name        : exec.c
 Author      : wangchuan
 Version     :
 Copyright   : Your copyright notice
 Description : Hello World in C, Ansi-style
 ============================================================================
 */

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

int main(void) {
	int sockfd;
	int len;
	struct sockaddr_in address;
	int result;
	char ch='A';
	sockfd=socket(AF_INET,SOCK_STREAM,0);
	address.sin_family=AF_INET;
	address.sin_addr.s_addr=inet_addr("127.0.0.1");
	address.sin_port=9734;
	len=sizeof(address);
	result=connect(sockfd,(struct sockaddr *)&address,len);
	if(result == -1){
		perror("oops:client");
		return 1;
	}
	write(sockfd,&ch,1);
	read(sockfd,&ch,1);
	printf("来自服务器的消息是%c\n",ch);
	close(sockfd);
	return 0;
}

3、如何查找主机名称

/*
 ============================================================================
 Name        : Test.c
 Author      : wangchuan
 Version     :
 Copyright   : Your copyright notice
 Description : Hello World in C, Ansi-style
 ============================================================================
 */

#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>

int main(int argc,char *argv[])
{
	char *host;
	int sockfd;
	int len,result;
	struct sockaddr_in address;
	struct hostent *hostinfo;
	struct servent *servinfo;
	char buffer[128];
	if(argc == 1)
		host = "localhost";
	else host=argv[1];
	hostinfo = gethostbyname(host);

	if(!hostinfo){
		fprintf(stderr,"找不到主机:%s\n",host);
		return 1;
	}
	servinfo = getservbyname("daytime","tcp");
	if(!servinfo){
		fprintf(stderr,"no daytime service\n");
		return 1;
	}

	printf("daytime服务器端口是:%d\n",ntohs(servinfo->s_port));
	sockfd = socket(AF_INET,SOCK_STREAM,0);
	address.sin_family=AF_INET;
	address.sin_port=servinfo->s_port;
	address.sin_addr=*(struct in_addr *)*hostinfo->h_addr_list;
	len=sizeof(address);

	result=connect(sockfd,(struct sockaddr *)&address,len);
	if(result == -1){
		perror("获得数据出错");
		return 1;
	}

	result = read(sockfd,buffer,sizeof(buffer));
	buffer[result]='\0';
	printf("读取%d字节:%s",result,buffer);
	close(sockfd);
	return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值