简单的stream socket例子

服务器端:

#include<stdio.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<stdlib.h>
int main(){
	int sock_server, sock_client;
	struct sockaddr_in server_addr, client_addr;
	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(6666);
	server_addr.sin_addr.s_addr = htonl(INADDR_ANY);  //inet_addr("127.0.0.1")
	sock_server = socket(AF_INET, SOCK_STREAM, 0);
	if(sock_server < 0){
		printf("server socket create error!\n");
		exit(1);		
	}
	int server_len = sizeof(server_addr);
	if(bind(sock_server, (struct sockaddr*)&server_addr, server_len) < 0){
		printf("bind server socket error\n");
		exit(0);
	}
	if(listen(sock_server, 5) < 0){
		printf("serever socket listen error\n");
		exit(1);
	}
	while(1){
//		printf("wait\n");
		int client_len = sizeof(client_addr);
		sock_client = accept(sock_server, (struct sockaddr*)&client_addr, (socklen_t*)&client_len);
		if(sock_client < 0){
			printf("Accept error\n");
			exit(1);
		}
//		printf("Accepted\n");
		int pid = fork();
		if(pid == 0){
			char buf[100];
			recv(sock_client, buf, 100, 0);
			printf("Message from client: %s\n", buf);
			send(sock_client, "Hello client", 100, 0);
			struct sockaddr_in server;
			server_len = sizeof(server);
			getsockname(sock_client, (struct sockaddr*)&server, (socklen_t*)&server_len);
			char local_addr[20];
			if(inet_ntop(AF_INET, (void*)&server.sin_addr, local_addr, sizeof(local_addr))){
//				printf("转换成功\n");
				printf("information: %s %d\n", local_addr, ntohs(server.sin_port));
			}
			else
				printf("地址转换失败\n");
//			printf("AAA\n");
			while(1)  //不调用close(),导致tcp状态一直处于close_wait状态
				;
			close(sock_client);
		}
	}
	close(sock_server);
	return 0;
}



客户端:

#include<stdio.h>
#include<netinet/in.h>
#include<unistd.h>
#include<sys/socket.h>
#include<stdlib.h>
#include<string.h>
int main(){
	int sock_server, sock_client;
	struct sockaddr_in server_addr, client_addr;
	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(6666);
	server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
	sock_client = socket(AF_INET, SOCK_STREAM, 0);
	if(sock_client < 0){
		printf("client socket create error!\n");
		exit(1);		
	}
	if(connect(sock_client, (struct sockaddr*)&server_addr, sizeof(server_addr)) != -1){
			printf("client success");
			char buf[100] = "Hello server";
			send(sock_client, buf, 100, 0);
			recv(sock_client, buf, 100, 0);
			printf("Message from server: %s\n", buf);
			int client_len = sizeof(client_addr);
			while(1)
				;
			close(sock_client);
	}else{
		printf("Connect error\n");
		exit(1);
	}
	return 0;
}


猜你喜欢

转载自blog.csdn.net/nice_wen/article/details/78075610