网络通信简单代码(TCP)

本文详细介绍了服务器端和客户端程序的实现步骤,包括创建套接字、绑定地址、监听及连接等过程,并通过示例代码展示了如何进行数据的收发与处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

服务器端程序实现步骤:
1.创建监听套接字(买一部只能接电话的手机)
2.给套接字绑定(IP)地址(相当于给手机上号)
3.将套接字设置为监听状态(开机,将手机设置为待机)
4.接受客户端连接请求(相当于接受来电请求)
5.收发数据(相互通信)
6.断开连接(挂机)
456|456|456|456|456(可重复执行)
7.关闭监听套接字(手机关机或飞行模式)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

int main()
{
//买手机
    int socket_listen=socket(AF_INET,SOCK_STREAM,0);
//绑卡
    struct sockaddr_in myaddr;
    myaddr.sin_family=AF_INET;
    myaddr.sin_addr.s_addr=INADDR_ANY;
    myaddr.sin_port=htons(6666);

    if(-1==bind(socket_listen,(struct sockaddr*)&myaddr,sizeof(myaddr)))
    {
        perror("bind");
        exit(-1);
    }
//待机
    listen(socket_listen,5);
//接电话
    int socket_conn=accept(socket_listen,NULL,NULL);
//通话
    char buf[100];
    int ret;
    ret=recv(socket_conn,buf,sizeof(buf),0);
    if(ret>0)
    {
        buf[ret]='\0';
        printf("客户端说:%s",buf);

        strcpy(buf,"已收到您的信息\n");
        send(socket_conn,buf,strlen(buf),0);
    }
    else
    {
        printf("连接已断开");
    }
//关电话
    close(socket_conn);
//关手机
    close(socket_listen);
    return 0;
}

客户端
1.创建流套接字(买手机)
2.绑定地址(买卡,可省略)
(如果不进行显示绑定或绑定失败,操作系统会隐式绑定,一般是较大数)
3.连接服务器 (呼叫)
4.收发数据(通话)
5.断开连接(挂机)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

int main(int argc,char** argv)
{
    if(3!=argc)
    {
        printf("参数有误\n");
        exit(-1);
    }
//买手机
    int socket_conn=socket(AF_INET,SOCK_STREAM,0);
//绑卡
    struct sockaddr_in myaddr;
    myaddr.sin_family=AF_INET;
    myaddr.sin_addr.s_addr=INADDR_ANY;
    myaddr.sin_port=htons(1234);

    if(-1==bind(socket_conn,(struct sockaddr*)&myaddr,sizeof(myaddr)))
    {
        perror("bind");
        exit(-1);
    }
//打电话
    struct sockaddr_in ser_addr;
    ser_addr.sin_family=AF_INET;
    ser_addr.sin_addr.s_addr=inet_addr(argv[1]);
    ser_addr.sin_port=htons(atoi(argv[2]));

    if(-1==connect(socket_conn,(struct sockaddr*)&ser_addr,sizeof(ser_addr)))
    {
        perror("connect");
        exit(-1);
    }
//收发消息
    char buf[100];
    int ret;
    strcpy(buf,"cmz,1701\n");
    ret=send(socket_conn,buf,strlen(buf),0);
    if(ret>0)
    {
        ret=recv(socket_conn,buf,sizeof(buf),0);
        buf[ret]='\0';
        printf("服务器回复说:%s",buf);
    }
    else
    {
        printf("连接已断开\n");
    }
//挂电话
    close(socket_conn);


    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值