当前位置: 首页>編程日記>正文

socket服务器和客户端的建立步骤

socket服务器和客户端的建立步骤

转自http://blog.csdn.net/wenwen227/archive/2008/12/17/3543497.aspx
TCP编程的服务器端一般步骤是:


1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt(); * 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();
4、开启监听,用函数listen();
5、接收客户端上来的连接,用函数accept();
6、收发数据,用函数send()和recv(),或者read()和write();
7、关闭网络连接;
8、关闭监听;

struct sockaddr_in addr; 定义一个ip地址


TCP编程的客户端一般步骤是:


1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
4、设置要连接的对方的IP地址和端口等属性;
5、连接服务器,用函数connect();
6、收发数据,用函数send()和recv(),或者read()和write();
7、关闭网络连接;
 


UDP编程的服务器端一般步骤是:




1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();
4、循环接收数据,用函数recvfrom();
5、关闭网络连接;




UDP编程的客户端一般步骤是:


1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
4、设置对方的IP地址和端口等属性;
5、发送数据,用函数sendto();
6、关闭网络连接;




server.c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <netinet/in.h>


#define MYPORT 3490
#define BACKLOG 10


main()
{
    int sockfd, new_fd;/*listen on sock_fd, new connection on new_fd*/
    struct socketaddr_in my_addr;//my address infomation
    struct socketaddr_in their_addr;//connector`s address infomation
    int sin_size;
    
    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {  //socket(AF_INET, SOCK_STREAM, 0) 这是创建一个socket
    /*AF_INET 表示用IPV4地址族,
SOCK_STREAM 是说是要是用流式套接字
0 是指不指定协议类型,系统自动根据情况指定*/
        perror("socket err");
        exit(1);
    }
    
    my_addr.sin_family = AF_INET;  //sin_family表示协议簇,一般用AF_INET表示TCP/IP协议。
    my_addr.sin_port = htons(MYPORT);//设置端口号
    //my_addr.sin_addr.s_addr = inet_addr("192.168.0.123");
    my_addr.sin_addr.s_addr = INADDR_ANY;//auto-fill with local ip
    bzero(&(my_addr.sin_zero), 8);
    if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) {
        perror("bind err");
        exit(1);
    }
    
    if (listen(sockfd, BACKLOG) == -1) {
        perror("listen err");
        exit(1);
    }
    
    while(1) {
        sin_size = sizeof(struct sockaddr_in);
        
        if ((new_fd = accept(sockfd, (struct sockaddr_in *)&their_addr, &sin_size)) == -1) {
            perror("accept err");
            continue;
        }
        printf("server: got connection from %s\n", inet_ntoa(their_addr.ain_addr));
        
        if (!fork()) {
            if (send(new_fd, "Hello ,world!\n", 14, 0) == -1) {
                perror("send err");
            }
            close(new_fd);
            exit(0);
        }
        while(waitpid(-1, NULL, WNOHANG) > 0);
    }
}




#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
int main()
{
    int server_sockfd, client_sockfd;
    int server_len, client_len;
    struct sockaddr_un server_address;
    struct sockaddr_un client_address;


    unlink("server_socket");
    server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0);


    server_address.sun_family = AF_UNIX;
    strcpy(server_address.sun_path, "server_socket");
    server_len = sizeof(server_address);
    bind(server_sockfd, (struct sockaddr *)&server_address, server_len);


    listen(server_sockfd, 5);
    while(1) {
        char ch;
        printf("server waiting!\n");


        client_len = sizeof(client_address);
        client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, &client_len);


        read(client_sockfd, &ch, 1);
        ch++;
        write(client_sockfd, &ch, 1);
        close(client_sockfd);
    }


https://www.fengoutiyan.com/post/15833.html

相关文章:

  • 建立socket连接
  • websocket多服务器
  • socket服务器搭建
  • mqtt服务器哪个好
  • socket 客户端
  • tcp客户端socket代码
  • java socket服务器
  • python socket客户端
  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機