zoukankan      html  css  js  c++  java
  • socket

    1、

    2、tcp、udp客户服务器socket一般过程

      1 TCP编程的服务器端一般步骤是:
      2 
      3 
      4 1、创建一个socket,用函数socket();
      5 2、设置socket属性,用函数setsockopt(); * 可选
      6 3、绑定IP地址、端口等信息到socket上,用函数bind();
      7 4、开启监听,用函数listen();
      8 5、接收客户端上来的连接,用函数accept();
      9 6、收发数据,用函数send()和recv(),或者read()和write();
     10 7、关闭网络连接;
     11 8、关闭监听;
     12 
     13 struct sockaddr_in addr; 定义一个ip地址
     14 
     15 
     16 
     17 TCP编程的客户端一般步骤是:
     18 
     19 
     20 1、创建一个socket,用函数socket();
     21 2、设置socket属性,用函数setsockopt();* 可选
     22 3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
     23 4、设置要连接的对方的IP地址和端口等属性;
     24 5、连接服务器,用函数connect();
     25 6、收发数据,用函数send()和recv(),或者read()和write();
     26 7、关闭网络连接;
     27  
     28 
     29 
     30 UDP编程的服务器端一般步骤是:
     31 
     32 
     33 
     34 
     35 1、创建一个socket,用函数socket();
     36 2、设置socket属性,用函数setsockopt();* 可选
     37 3、绑定IP地址、端口等信息到socket上,用函数bind();
     38 4、循环接收数据,用函数recvfrom();
     39 5、关闭网络连接;
     40 
     41 
     42 
     43 
     44 UDP编程的客户端一般步骤是:
     45 
     46 
     47 1、创建一个socket,用函数socket();
     48 2、设置socket属性,用函数setsockopt();* 可选
     49 3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
     50 4、设置对方的IP地址和端口等属性;
     51 5、发送数据,用函数sendto();
     52 6、关闭网络连接;
     53 
     54 
     55 
     56 
     57 server.c
     58 #include <stdio.h>
     59 #include <stdlib.h>
     60 #include <errno.h>
     61 #include <string.h>
     62 #include <sys/types.h>
     63 #include <sys/socket.h>
     64 #include <sys/wait.h>
     65 #include <netinet/in.h>
     66 
     67 
     68 #define MYPORT 3490
     69 #define BACKLOG 10
     70 
     71 
     72 main()
     73 {
     74     int sockfd, new_fd;/*listen on sock_fd, new connection on new_fd*/
     75     struct socketaddr_in my_addr;//my address infomation
     76     struct socketaddr_in their_addr;//connector`s address infomation
     77     int sin_size;
     78     
     79     if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {  //socket(AF_INET, SOCK_STREAM, 0) 这是创建一个socket
     80     /*AF_INET 表示用IPV4地址族,
     81 SOCK_STREAM 是说是要是用流式套接字
     82 0 是指不指定协议类型,系统自动根据情况指定*/
     83         perror("socket err");
     84         exit(1);
     85     }
     86     
     87     my_addr.sin_family = AF_INET;  //sin_family表示协议簇,一般用AF_INET表示TCP/IP协议。
     88     my_addr.sin_port = htons(MYPORT);//设置端口号
     89     //my_addr.sin_addr.s_addr = inet_addr("192.168.0.123");
     90     my_addr.sin_addr.s_addr = INADDR_ANY;//auto-fill with local ip
     91     bzero(&(my_addr.sin_zero), 8);
     92     if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) {
     93         perror("bind err");
     94         exit(1);
     95     }
     96     
     97     if (listen(sockfd, BACKLOG) == -1) {
     98         perror("listen err");
     99         exit(1);
    100     }
    101     
    102     while(1) {
    103         sin_size = sizeof(struct sockaddr_in);
    104         
    105         if ((new_fd = accept(sockfd, (struct sockaddr_in *)&their_addr, &sin_size)) == -1) {
    106             perror("accept err");
    107             continue;
    108         }
    109         printf("server: got connection from %s
    ", inet_ntoa(their_addr.ain_addr));
    110         
    111         if (!fork()) {
    112             if (send(new_fd, "Hello ,world!
    ", 14, 0) == -1) {
    113                 perror("send err");
    114             }
    115             close(new_fd);
    116             exit(0);
    117         }
    118         while(waitpid(-1, NULL, WNOHANG) > 0);
    119     }
    120 }
    121 
    122 
    123 
    124 
    125 #include <stdio.h>
    126 #include <stdlib.h>
    127 #include <sys/types.h>
    128 #include <sys/socket.h>
    129 #include <sys/un.h>
    130 #include <unistd.h>
    131 int main()
    132 {
    133     int server_sockfd, client_sockfd;
    134     int server_len, client_len;
    135     struct sockaddr_un server_address;
    136     struct sockaddr_un client_address;
    137 
    138 
    139     unlink("server_socket");
    140     server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
    141 
    142 
    143     server_address.sun_family = AF_UNIX;
    144     strcpy(server_address.sun_path, "server_socket");
    145     server_len = sizeof(server_address);
    146     bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
    147 
    148 
    149     listen(server_sockfd, 5);
    150     while(1) {
    151         char ch;
    152         printf("server waiting!
    ");
    153 
    154 
    155         client_len = sizeof(client_address);
    156         client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, &client_len);
    157 
    158 
    159         read(client_sockfd, &ch, 1);
    160         ch++;
    161         write(client_sockfd, &ch, 1);
    162         close(client_sockfd);
    163     }
    View Code

    +

  • 相关阅读:
    Android学习第九天
    Android短信备份及插入笔记
    内容提供者实现应用访问另一个应用的数据库
    Verilog语言实现1/2分频
    QT中一个界面向另一个界面发送信号
    CMAKE设置Windows SDK编译版本
    VS2017下载地址
    VS 设置Windows SDK版本
    OBS 64bit版本编译
    Qt打包程序无法运行,提示应用程序无法正常启动0xc000007b解决办法
  • 原文地址:https://www.cnblogs.com/zhanzhao/p/5809824.html
Copyright © 2011-2022 走看看