zoukankan      html  css  js  c++  java
  • C语言socket入门

    socket协议


    三次握手与结束连接



    客户端代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h> //for bzero
    
    #include <netinet/in.h> //for socketaddr_in
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <errno.h>
    
    #define PORT 5050    //端口号
    #define MAXLEN_FOR_DATA  1024//数据的最大长度
    
    int main(){
    	
    	int clientfd;// 套接字
    	int len, ret;
    	char buf[MAXLEN_FOR_DATA];	
    	
    	struct sockaddr_in serveraddr;
    	
    	//建立套接口
    	clientfd = socket(AF_INET, SOCK_STREAM, 0);
    	if (clientfd == -1){
    		fprintf(stderr, "Failed: socket()\n ");
    		goto exit;	
    	}
    	printf("Sucessed: socket()\n");
    	
    	
    	//****连接********
    	serveraddr.sin_family = AF_INET;
    	serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    	serveraddr.sin_port = htons(PORT);
    	len = sizeof(serveraddr);
    	ret =  connect(clientfd, (struct sockaddr*)&serveraddr, len);
    	if (ret == -1){
    		fprintf(stderr, "Failed: connect()\n");
    		goto exit;
    	}
    	printf("Sucessed: connect() \n");
    	
    	sprintf(buf, "%s \n", "Hello World!");
    	ret = send(clientfd, (void*)buf, strlen(buf), 0);
    	if (ret <= 0){
    		fprintf(stderr, "Failed: send()\n");
    		goto exit;
    	}
    	printf("Sucessed: send()\n");
    	
    	
    	exit:
    		close(clientfd);
    		clientfd = -1;
    		return 0;
    }
    


    服务器:


    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h> //for bzero
    
    #include <netinet/in.h> //for socketaddr_in
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <errno.h>
    
    #define PORT 5050
    #define LEN_FOR_LISTEN_QUEUE 5
    #define MAXLEN_FOR_DATA 1024
    
    int main(){
    	
    	//
    	int serverfd, clientfd;//套接字
    	int len;
    	int ret;
    	char buf[MAXLEN_FOR_DATA];
    	struct sockaddr_in serveraddr;//服务器地址信息
    	struct sockaddr_in clientaddr;
    	
    	
    	//创建套接口
    	serverfd = socket(AF_INET, SOCK_STREAM, 0);
    	if (serverfd == -1){
    		fprintf(stderr, "Failed: socket()\n");
    		goto exit;
    	}
    	printf("Sucessed: socket()\n");
    	
    	
    	//绑定地址和端口号
    	serveraddr.sin_family = AF_INET;
    	serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
    	serveraddr.sin_port = htons(PORT);
    	len = sizeof(serveraddr);
    	ret = bind(serverfd, (struct sockaddr*)&serveraddr, len);
    	if (ret == -1){
    		fprintf(stderr, "Failed: bind()\n");
    		goto exit;	
    	}
    	printf("Sucessed:bind()\n");
    	
    	//建立套接口监听队列
    	ret = listen(serverfd, LEN_FOR_LISTEN_QUEUE);
    	if (ret == -1){
    		fprintf(stderr, "Failed: listen()\n");
    		goto exit;	
    	}
    	printf("Sucess:listen()\n");
    	
    	while (1){
    		printf("Wait For..\n");
    		fflush(stdout);
    		
    		
    		//接受连接
    		len = sizeof(clientaddr);
    		clientfd = accept(serverfd, (struct sockaddr*)&clientaddr, &len);
    		if (clientfd == -1){
    			fprintf(stderr, "Failed: accept()\n");
    			goto exit;	
    		}
    		printf("Sucessed:accept()!\n");
    		
    		
    		//接受数据
    		ret = recv(clientfd, (void*)buf, MAXLEN_FOR_DATA, 0);
    		if (ret <= 0){
    			fprintf(stderr, "Failed: recv()\n");	
    		}
    		else {
    			printf("Sucessed: recv()\n Data:%s", buf);	
    		}
    		
    		
    		//关闭连接
    		close(clientfd);
    		printf("Closed!\n");
    	}
    	
    	exit:
    		return 0;
    }











  • 相关阅读:
    zzbank oneOpencloud Env linuxaix6.1 interactiveMaintain(nfs,aix genintall基于系统iso光盘,aix6.1 puppet-Agent,Cent6.4 puppetServer,agent time no syn case Er)
    openStack core service Components Ins shell scripts and simple provision
    openStack deep dive,Retake Policy
    openStack开源云repo db local or on-line 实战部署之Ruiy王者归来
    Power Network (poj 1459 网络流)
    Eclipse.ini參数设置(Maven Integration for Eclipse JDK Warning)
    移动三大平台和三大开发模式对照分析
    Android动态设置字体颜色
    Windows 8提升普通管理员权限为超级管理员权限以及激活超级管理员Administrator
    CDN具体解释(篇一)
  • 原文地址:https://www.cnblogs.com/Windeal/p/4284694.html
Copyright © 2011-2022 走看看