zoukankan      html  css  js  c++  java
  • [国嵌攻略][093][并发服务器设计]

    server.c

    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <strings.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    
    #define SERVER_PORT 3333
    
    void main(){
     	//创建标识
    	int serverfd;
    	
    	serverfd = socket(AF_INET, SOCK_STREAM, 0);   //建立TCP连接
    	
    	//绑定地址
    	struct sockaddr_in serverAddr;
    	
    	serverAddr.sin_family = AF_INET;                   //设置协议
    	serverAddr.sin_port = htons(SERVER_PORT);          //设置端口
    	serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);    //设置地址
    	bzero(serverAddr.sin_zero, 8);                     //设置为零
    	
    	bind(serverfd, (struct sockaddr *)&serverAddr, sizeof(struct sockaddr));
    	
    	//监听端口
    	listen(serverfd, 10);
    	
    	while(1){
    		//等待连接
    		socklen_t clientAddrLen;
    		struct sockaddr_in clientAddr;
    		int clientfd;
    
    		clientAddrLen = sizeof(struct sockaddr);
    		clientfd = accept(serverfd, (struct sockaddr *)&clientAddr, &clientAddrLen);
    		
    		//创建进程
    		int pid;
    		
    		pid = fork();
    		if(pid == 0){
    			//接收数据
    			char buffer[2048];
    			
    			recv(clientfd, buffer, sizeof(buffer), 0);
    			
    			//显示数据
    			char *clientIPAddr;
    			
    			clientIPAddr = (char *)inet_ntoa(clientAddr.sin_addr.s_addr);
    			printf("server recvice from %s:
    %s", clientIPAddr, buffer);
    			
    			//关闭连接
    			close(clientfd);
    			close(serverfd);
    			
    			//结束进程
    			exit(0);
    		}
    
    		//关闭连接
    		close(clientfd);
    	}
    	
    	//关闭连接
    	close(serverfd);
    }
    

    client.c

    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <strings.h>
    #include <stdio.h>
    
    #define SERVER_PORT 3333
    
    int main(int argc, char **argv){
    	//参数检查
    	if(argc != 2){
    		printf("Usage:
    	./client <ip address>
    ");
    		return -1;
    	}
    	
    	//创建标识
    	int clientfd;
    	
    	clientfd = socket(AF_INET, SOCK_STREAM, 0);   //建立TCP连接
    	
    	//建立连接
    	struct sockaddr_in serverAddr;
    	
    	serverAddr.sin_family = AF_INET;                   //设置协议
    	serverAddr.sin_port = htons(SERVER_PORT);          //设置端口
    	serverAddr.sin_addr.s_addr = inet_addr(argv[1]);   //设置地址
    	bzero(serverAddr.sin_zero, 8);                     //设置为零
    	
    	connect(clientfd, (struct sockaddr *)&serverAddr, sizeof(struct sockaddr));
    
    	//输入数据
    	char buffer[2048];
    	
    	printf("client send to %s:
    ", argv[1]);
    	fgets(buffer, sizeof(buffer), stdin);
    	
    	//发送数据
    	send(clientfd, buffer, sizeof(buffer), 0);
    	
    	//关闭连接
    	close(clientfd);
    	
    	return 0;
    }
    
  • 相关阅读:
    SpringMVC案例3----spring3.0项目拦截器、ajax、文件上传应用
    TCP/IP、UDP、 Http、Socket的差别
    HttpClient 图讲解明
    数据库设计--数据的垂直拆分
    未经处理的异常在 System.Data.dll 中发生。其它信息:在应使用条件的上下文(在 &#39;***&#39; 附近)中指定了非布尔类型的表达式。
    VMware 下扩展linux硬盘空间
    cocos2d_android 第一个游戏
    解决安卓程序安装没图标的问题
    Qt编译错误GL/gl.h: No such file or directory
    【编程题目】二元树的深度
  • 原文地址:https://www.cnblogs.com/d442130165/p/5233721.html
Copyright © 2011-2022 走看看