C++实现Socket网络编程

6 篇文章 1 订阅
本文展示了如何使用C语言实现一个简单的TCP/IP服务器和客户端。服务器监听8888端口,等待客户端连接,接收并打印客户端发送的数据。客户端连接到服务器,从标准输入读取数据并发送到服务器,直到输入'quit'为止。这是一个基础的网络编程示例,涵盖了socket编程的基本步骤:创建套接字、绑定、监听、接受连接和数据传输。
摘要由CSDN通过智能技术生成
/*服务器*/ 
#include <stdio.h> 
#include <unistd.h>
#include <string.h> 
#include <stdlib.h> 
#include <strings.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <arpa/inet.h> 
#include <netinet/in.h> 
int main() 
{ 
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);//创建套接字 
    if (sockfd < 0) 
    { 
        perror("socket"); 
        return -1; 
    } //创建失败的错误处理 
    printf("socket..............\n"); //成功则打印“socket。。。。” 

    struct sockaddr_in myaddr; //创建“我的地址”结构体 
    memset(&myaddr, 0, sizeof(myaddr)); //对内存清零(保险起见) 
    myaddr.sin_family       = AF_INET; //选择IPV4地址类型 
    myaddr.sin_port         = htons(8888); //选择端口号 
    myaddr.sin_addr.s_addr  = inet_addr("192.168.3.169"); //选择IP地址 

 if (0 > bind(sockfd, (struct sockaddr*)&myaddr, sizeof(myaddr)))//绑定套接字 
    { 
        perror("bind"); 
        return -1; 
    } 
    printf("bind..........\n"); 

    if (0 > listen(sockfd, 8))//调用listen对指定端口进行监听 
    { 
        perror("listen"); 
        return -1; 
    } 
    printf("listen............\n"); 

    int connfd = accept(sockfd, NULL, NULL);//使用accept从消息队列中获取请求 
    if (connfd < 0) 
    { 
        perror("accept"); 
        return -1; 
    } 
    printf("accept..............\n"); 
    char buf[100];//定义一个数组用来存储接收到的数据 
    int ret; 
    while (1) 
    { 
        memset(buf, 0, sizeof(buf)); 
        ret = read(connfd, buf, sizeof(buf)); 
        if (0 > ret) 
        { 
            perror("read"); 
            break; 
        }//执行while循环读取数据,当 
        else if (0 == ret) 
        { 
            printf("write close!\n"); 
            break; 
        } 
        printf("recv: "); 
        fputs(buf, stdout);//打印接收到的数据 
    } 
    close(sockfd);//关闭套接字 
    close(connfd);//断开连接 
    return 0; 
} 
/*客户端*/(具体功能和服务器一样,所以不再加注释) 
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <strings.h> 
#include <unistd.h>
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
int main() 
{ 
 int sockfd; 
    if (0 > (sockfd = socket(AF_INET, SOCK_STREAM, 0))) 
    { 
        perror("socket"); 
        return -1; 
    } 
    printf("socket...........\n"); 

    struct sockaddr_in srv_addr; 
    memset(&srv_addr, 0, sizeof(srv_addr)); 
    srv_addr.sin_family         = AF_INET; 
    srv_addr.sin_port           = htons(8888); 
    srv_addr.sin_addr.s_addr    = inet_addr("192.168.3.169"); 
    if (0 > connect(sockfd, (struct sockaddr*)&srv_addr, sizeof(srv_addr))) 
    { 
        perror("connect"); 
        return -1; //exit //pthread_exit 
    } 
    printf("connect..............\n"); 
    char buf[100]; 
    int ret; 
    while (1) 
    { 
        printf("send: "); 
        fgets(buf, sizeof(buf), stdin); 
        ret = write(sockfd, buf, sizeof(buf)); 
        if (ret < 0) 
        { 
            perror("write"); 
            break; 
        } 
        if (strncmp(buf, "quit", 4) == 0) 
            break; 
    } 
    close(sockfd); 
    return 0; 
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值