简单的linux c socket例子

2023-05-16

服务端代码:

# include < stdio. h>
# include < string . h>
# include < sys/ socket . h>
# include < netinet/ in. h>

# define MAXDATASIZE 1024

# define SERVERPORT 8000
# define MAXCONN_NUM 10

int main( )
{
    char buf[ MAXDATASIZE] ;
    int sockfd, new_fd, numbytes;
    struct sockaddr_in server_addr;
    struct sockaddr_in client_addr;
    int sin_size;
    if ( ( sockfd = socket ( AF_INET , SOCK_STREAM , 0) ) = = - 1) {
        perror ( "socket error" ) ;
        return 1;
    }
    memset ( & client_addr, 0, sizeof ( struct sockaddr ) ) ;
    server_addr. sin_family = AF_INET ;
    server_addr. sin_port = htons ( SERVERPORT) ;
    server_addr. sin_addr. s_addr = INADDR_ANY ;
    if ( bind ( sockfd, ( struct sockaddr * ) & server_addr, sizeof ( struct sockaddr ) ) = = - 1) {
        perror ( "bind error" ) ;
        return 1;
    }
    if ( listen ( sockfd, MAXCONN_NUM) = = - 1) {
        perror ( "listen error" ) ;
        return 1;
    }

    while ( 1) {
        sin_size = sizeof ( struct sockaddr_in ) ;
        if ( ( new_fd = accept ( sockfd, ( struct sockaddr * ) & client_addr, & sin_size) ) = = - 1) {
            perror ( "accept error" ) ;
            continue ;
        }
        printf ( "server: got connection from %s/n" , inet_ntoa( client_addr. sin_addr) ) ;
        if ( ( numbytes = recv ( new_fd, buf, MAXDATASIZE, 0) ) = = - 1) {
            perror ( "recv error" ) ;
            return 1;
        }
        if ( numbytes) {
            buf[ numbytes] = '/0' ;
            printf ( "received: %s/n" , buf) ;
            sleep ( 3) ;
        }
        printf ( "send: hi~~/n" ) ;
        if ( send ( new_fd, "hi~~" , 5, 0) = = - 1) {
            perror ( "send error" ) ;
            return 1;
        }
        close ( new_fd) ;
    }
    return 0;
}




客户端代码:

# include < stdio. h>
# include < string . h>
# include < sys/ socket . h>
# include < netinet/ in. h>

# define MAXDATASIZE 1024

# define SERVERIP "192.168.0.2"
# define SERVERPORT 8000

int main( int argc, char * argv[ ] )
{
    char buf[ MAXDATASIZE] ;
    int sockfd, numbytes;
    struct sockaddr_in server_addr;
    if ( ( sockfd = socket ( AF_INET , SOCK_STREAM , 0) ) = = - 1) {
        perror ( "socket error" ) ;
        return 1;
    }
    memset ( & server_addr, 0, sizeof ( struct sockaddr ) ) ;
    server_addr. sin_family = AF_INET ;
    server_addr. sin_port = htons ( SERVERPORT) ;
    server_addr. sin_addr. s_addr = inet_addr( SERVERIP) ;
    if ( connect ( sockfd, ( struct sockaddr * ) & server_addr, sizeof ( struct sockaddr ) ) = = - 1) {
        perror ( "connect error" ) ;
        return 1;
    }
    printf ( "send: Hello, world!/n" ) ;
    if ( send ( sockfd, "Hello, world!" , 14, 0) = = - 1) {
        perror ( "send error" ) ;
        return 1;
    }
    if ( ( numbytes = recv ( sockfd, buf, MAXDATASIZE, 0) ) = = - 1) {
        perror ( "recv error" ) ;
        return 1;
    }
    if ( numbytes) {
        buf[ numbytes] = '/0' ;
        printf ( "received: %s/n" , buf) ;
    }
    close ( sockfd) ;
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简单的linux c socket例子 的相关文章

随机推荐

  • PerSAM!单图即可定制专属SAM模型!支持微调,甚至可增强DreamBooth

    大家好呀 xff0c 我是阿潘 Meta 的 Segment Anything Model 着实火了一把 xff0c 今天来和大家分享一篇相关的研究成果 xff0c 论文和代码都已开源 xff1a 从标题的字面意思应该就是指仅需一个样本即可
  • Python绘制可爱的卡通人物 | 【turtle使用】

    Turtle库 简介 什么是Turtle 首先 xff0c turtle库是一个点线面的简单图像库 xff0c 能够完成一些比较简单的几何图像可视化 它就像一个小乌龟 xff0c 在一个横轴为x 纵轴为y的坐标系原点 xff0c 0 0 位
  • STM32 Keil5 Bug记录 汇总和解决办法

    STM32 Keil5 Bug记录 汇总和解决办法 文章目录 STM32 Keil5 Bug记录 汇总和解决办法前言一 Warning1 warning no newline at end of file2 warning function
  • STM32重要源文件和头文件说明

    对于STM32F4xx StdPeriph Driver xff0c 其重要源文件为 xff1a stm32f4xx ppp h xff1a 外设头文件 这里的ppp只是一个代码 xff0c 在实际上是具体的外设名字 xff0c 如ADC
  • 带参宏定义和带参函数的区别

    在带参宏定义中 xff0c 不会为形式参数分配内存 xff0c 因此不必指明数据类型 而在宏调用中 xff0c 实参包含了具体的数据 xff0c 要用它们去代换形参 xff0c 因此必须指明数据类型 这一点和函数是不同的 xff1a 在函数
  • “段寄存器”的故事

    一 段寄存器的产生 段寄存器的产生源于Intel 8086 CPU体系结构中数据总线与地址总线的宽度不一致 数据总线的宽度 xff0c 也即是ALU 算数逻辑单元 的宽度 xff0c 平常说一个CPU是 16位 或者 32位 指的就是这个
  • 阿里面试官:为什么MySQL数据库索引选择使用B+树而不是跳表?

    来源 xff1a https www cnblogs com andydao p 12891690 html 作者 xff1a andydaopeng 在进一步分析为什么MySQL数据库索引选择使用B 43 树之前 xff0c 我相信很多小
  • AD生成bom表

    1 Report Bill of material 2 可通过点击右侧的Columns xff0c 更改导出属性 3 点击Preview 查看生成的excel文件 4 生成的 excel文件 注 xff1a 出bom表的原理图需要在工程里
  • 你对Linux下的实时性应该多点了解

    本文讲述一些有利于提高xenomai实时性的配置建议 xff0c 部分针对X86架构 xff0c 但它们的底层原理相通 xff0c 同样适用于其他CPU架构和系统 xff0c 希望对你有用 一 前言 1 什么是实时 实时 一词在许多应用领域
  • HTTP/3.0 ,它来了!

    HTTP 3 0 是 HTTP 协议的第三个主要版本 xff0c 前两个分别是 HTTP 1 0 和 HTTP 2 0 xff0c 但其实 HTTP 1 1 我认为才是真正的 HTTP 1 0 我们大家知道 xff0c HTTP 是应用层协
  • 简单聊聊从 nginx 到 kong 的进化

    在我们的传统业务中 xff0c Nginx 在七层网关场景中应用得很广 但是最近几年由于微服务的盛行 Nginx 上的这套生态链也在不断地进化 2007 年国人章亦春大神在 Nginx 的基础上开发出了 OpenResty 2009 年 m
  • golang中的缓存一致性、内存序、内存屏障与CAS原理

    CPU缓存架构 现代处理器一般是多核架构 xff0c 并且为了平衡CPU和内存的速度差距 xff0c 还引入了多级Cache CPU Cache 是由很多个 Cache Line 组成 xff0c 每个Cache Line大小为64KB C
  • HashMap与红黑树

    一 为什么需要HashMap 在我们写程序的时候经常会遇到数据检索等操作 xff0c 对于几百个数据的小程序而言 xff0c 数据的存储方式或是检索策略没有太大影响 xff0c 但对于大数据 xff0c 效率就会差很远 1 线性检索 xff
  • docker执行报错:no such file or directory: unknown

    在linux下编译的golang程序放到docker的busybox镜像里无法执行 xff0c 显示报错信息 xff1a exec No such file or directory 在Docker化的今天 xff0c 我们经常需要静态编译
  • 香烟价格

    上海地区报价 欢迎补漏 改错 有的价格过高或偏底是地域不同 品名 产地 批发 零售 白沙 xff08 硬盒 xff09 长沙卷烟厂 42 00 4 50 白沙 xff08 软盒 xff09 长沙卷烟厂 37 00 4 00 芙蓉 xff08
  • java关键字Transient

    Java的serialization提供了一种持久化对象实例的机制 当持久化对象时 xff0c 可能有一个特殊的对象数据成员 xff0c 我们不想用serialization机制来保存它 为了在一个特定对象的一个域上关闭serializat
  • 拨打国际电话的国际字冠和国家代码

    中国 字冠 代码 中国大陆 00 86 中国香港 001 852 中国澳门 01 853 中国台湾 002 886 其它国家或地区 序号 国家 国际字冠 国家代码 1 美国 011 1 2 加拿大 011 1 3 智利 0 56 4 秘鲁
  • VirtualBox Host-Only 连接设置

    1 VirtualBox连接方式选择 xff1a Host Only 在宿主机windows上会自动新建连接 xff1a VirtualBox Host Only Network 2 启用宿主机windows的连接共享 xff0c 此时Vi
  • 基于HHARM9-EDU的TCP/IP(UDP)协议的实现

    基于HHARM9 EDU的TCP IP UDP 协议的实现 摘 要 xff1a 嵌入式技术的发展日新月异 xff0c 现如今 xff0c 嵌入式设备已经广泛应用于各种网络 xff0c 本文简要地说明一下如何实现 PC 与 HHARM9 ED
  • 简单的linux c socket例子

    服务端代码 xff1a span style color 000000 span style color 0000cc span span style color ff0000 include span span style color 0