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;
    }











  • 相关阅读:
    [Android] 升级了新的android studio之后 发生如下的报错,The following classes could not be instantiated:
    [IOS]译Size Classes with Xcode 6: One Storyboard for all Sizes
    [IOS] 利用@IBInspectable
    [IOS]swift自定义uicollectionviewcell
    [IOS]Swift使用SVGKit的记录
    [IOS初学]ios 第一篇 storyboard 与viewcontroller的关系
    [Android]关于filed 遍历资源文件的排序问题
    [Android]关于Installation error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED ,修改包名
    [Android]用图库打开指定的文件夹,没错是第一个画面直接是图库的文件夹画面
    [Android]新版的sdk中新建一个android应用,增加的PlaceholderFragment这个静态类发生的事情
  • 原文地址:https://www.cnblogs.com/Windeal/p/4284694.html
Copyright © 2011-2022 走看看