转自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);
    }

socket服务器和客户端的建立步骤相关推荐

  1. 一个 Java 的 Socket 服务器和客户端通信的例子

    http://blog.csdn.net/defonds/article/details/7971259 多个客户端对应一个服务端的通信的一个小例子.  服务端和客户端代码: public class ...

  2. Java Socket服务器端与客户端的编程步骤总结

    一,InetAddress类: InetAddress类没有构造方法,所以不能直接new出一个对象: 可以通过InetAddress类的静态方法获得InetAddress的对象: InetAddres ...

  3. linux与python客户端,Python编写的socket服务器和客户端

    服务器端: #!/usr/bin/python import socket host='127.0.0.1' port=8123 s=socket.socket(socket.AF_INET,sock ...

  4. php socket wss,websocket客户端无法建立wss连接

    hi,我在编译swoole时加入了--enable-openssl,也在websocket_server.php中开启了open_ssl选项,但是客户端仍然无法连接到wss,以下是日志: {{{ [/ ...

  5. android socket io和服务器_Java socket通讯服务器和客户端教学版

    什么是socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 建立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API), ...

  6. ktor框架用到了netty吗_教你如何构建异步服务器和客户端的 Kotlin 框架 Ktor

    Ktor 是一个使用 Kotlin 以最小的成本快速创建 Web 应用程序的框架. Ktor 是一个用于在连接系统(connected systems)中构建异步服务器和客户端的 Kotlin 框架. ...

  7. 基于TCP/UDP的socket服务器搭建流程

    目录 TCP/UDP概念介绍 一.TCP/UDP对比 二.端口号的作用 三.字节序 1.概念 2.分类 3.C程序在内存空间的映射 socket服务器与客户端开发流程 一.流程介绍 二.socket服 ...

  8. SVN服务器与客户端的配置

    2019独角兽企业重金招聘Python工程师标准>>> 参照http://blog.csdn.net/ladofwind/article/details/2100200 如何快速建立 ...

  9. linux下c/c++实例之socket服务器实例

    一.简介 二.详解 简单socket服务器和客户端(基础) 服务器: /* * socket简单编程 服务端*/#include <stdio.h> #include <string ...

  10. 腾讯云搭建多终端《你画我猜》Socket服务器

    项目概述 Java课大作业,做一个小游戏,三人Git协作,不同终端,一个分支三个文件夹互不影响.Demo地址 ,Github地址.先来目睹一下吧! 原理图 当玩家1在使用画笔在画板上进行绘图工作时,把 ...

最新文章

  1. 用好 Spring AOP,天降大锅从容应对!
  2. 一种用于360度全景视频超分的单帧多帧联合网络
  3. JS显示document里所有的成员
  4. 【控制】《复杂运动体系统的分布式协同控制与优化》-方浩老师-第1章-绪论
  5. kubenetes中YAML的字段解释
  6. 计算机专业复试线380,445名400+的科软复试线388分,计算机学硕380分,卷炸了
  7. Local Binary Convolutional Neural Networks ---卷积深度网络移植到嵌入式设备上?
  8. Spring总结四:IOC和DI 注解方式
  9. [深度学习-NLP]Imdb数据集情感分析之模型对比(贝叶斯, LSTM, GRU, TextCNN, Transformer, BERT)
  10. 125w短波通信距离_125W军用自主选频短波电台
  11. 「HenCoder Plus」Android 高级培养计划 FAQ
  12. 【文档/键值数据库】文档数据库和键值数据库有什么区别
  13. 用lex和yacc写成的一个具有解析类C语言的编译器,能够进行正确的词法、语法、语义分析并生成语法树进行可视化以及中间码。
  14. matlab中算术平方根,改进的平方根法matlab
  15. python画风羽及风羽定义
  16. python决策树案例_决策树案例:基于python的商品购买能力预测系统
  17. 思科路由器配置GRE隧道
  18. mini2440之--adc程序
  19. 平台服务器的配置信息失败,安装程序配置服务器失败-安装程序配置服务器失败.参考服务器错误日志和Cwindowssqlstp.log了解更多信息...
  20. 计算机专硕考数一英一,专硕难度升级!改考数一英一,这所近2.3万人报考的热门高校大改...

热门文章

  1. 基于multisim的晶体管放大器设计
  2. MATLAB机器人仿真:利用plot3d显示真实三维仿真模型
  3. 让cajviewer记住正在浏览的文献,下次启动时自动打开上次浏览的文献
  4. 投影仪是计算机的基本配置吗,投影仪如何设置
  5. 在线坐标系经纬度转换工具
  6. 实现领域驱动设计.pdf
  7. 巧用金山网盾对付游戏插件强行锁定主页
  8. LabelMe安装报错解决方案
  9. 【visio】visio绘制流程图教程
  10. flash绘制荷花多个图层_《荷花》Flash动画课件