网络通信-tcp/udp

本文详细介绍了使用C语言通过TCP和UDP协议创建服务器与客户端的通信过程,包括socket创建、地址绑定、监听连接、数据传输等关键步骤。
摘要由CSDN通过智能技术生成

1、tcp简单的通信

1)服务器

#include<myhead.h>
#define MYIP "192.168.243.130"
#define MYPORT 8888
int main(int argc, const char *argv[])
{
        //1、用socket创建一个载体
        int sfd=socket(AF_INET,SOCK_STREAM,0);
        if(sfd==-1)
        {
                perror("perror socket");
                return -1;
        }
        printf("socket success\n");

        //2、绑定信号
        //2.1绑定前期筹备
        struct sockaddr_in sin;
        sin.sin_family=AF_INET;
        sin.sin_port=htons(MYPORT);
        sin.sin_addr.s_addr=inet_addr(MYIP);
        //2.2正式bind操作
//      int cfd=bind(sfd,(struct sockaddr*)&sin,sizeof(sin));
        if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1)
        {
                perror("bind error");
                return -1;
        }
        printf("bind success\n");
        //3、listen模式
        if(listen(sfd,128)==-1)
        {
                perror("listen error");
                return -1;
        }
        printf("listen success\n");

        //4、aceept接受客户端的连接申请
        //4.1客户端信息的记录;
        struct sockaddr_in cin;
        socklen_t socklen=sizeof(cin);
        int newfd=accept(sfd,(struct sockaddr*)&cin,&socklen);
        if(newfd==-1)
        {
                perror("sccept error");
                return -1;
        }
        printf("accept success\n");

        //5读写操作
        char rbuf[128]="";
        while(1)
        {
                bzero(rbuf,sizeof(rbuf));
        int     a=read(newfd,rbuf,sizeof(rbuf));
        if(a==0)
        {

                printf("客户端已下线\n");
                return -1;
        }
                printf("%s\n",rbuf);
        }

        printf("[%s:%d:已连接,%s\n",\
                        inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),rbuf);


        close(newfd);
        close(sfd);

        return 0;
}
 

 2)客户端

#include<myhead.h>
#define MYIP "192.168.243.130"
#define MYPORT 8888
#define YOUIP "192.168.243.130"
#define YOUPORT 9999

int main(int argc, const char *argv[])
{
        //载体的创建
        int cfd =socket(AF_INET,SOCK_STREAM,0);
        if(cfd==-1)
        {
                perror("socket error");
                return -1;
        }
        printf("socket sunccess\n");

        //2、信息的绑定
        struct sockaddr_in sin;
        sin.sin_family=AF_INET;
        sin.sin_port=htons(YOUPORT);
        sin.sin_addr.s_addr=inet_addr(YOUIP);
        if(bind(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1)
        {
                perror("bind error");
                return -1;
        }
        printf("bind sunccess\n");

        //3、connecy 连接服务器
        struct sockaddr_in cin;
        cin.sin_addr.s_addr=inet_addr(MYIP);
        cin.sin_family=AF_INET;
        cin.sin_port=htons(MYPORT);
        if(connect(cfd,(struct sockaddr*)&cin,sizeof(cin))==-1)
        {
                perror("connect error");
                return -1;
        }
        printf("connect success\n");

        //4、读写操作
        char rbuf[128]="";
        char wbuf[128]="";
        while(1)
        {
                bzero(rbuf,sizeof(rbuf));
                bzero(wbuf,sizeof(wbuf));
                printf("请输入数据》》》》");
                fgets(wbuf,sizeof(wbuf),stdin);
                wbuf[strlen(wbuf)-1]=0;
                write(cfd,wbuf,sizeof(wbuf));
        }

        close(cfd);
        return 0;
}
 

2、udp简单通信

 2.1服务器

#include<myhead.h>
#define MYIP "192.168.243.130"
#define MYPORT 1234

int main(int argc, const char *argv[])
{
        //1、通信载体
        int sfd=socket(AF_INET,SOCK_DGRAM,0);
        if(sfd==-1)
        {
                perror("socket error");
                return -1;

        }
        printf("socket success\n");

        //2、绑定ip和端口号
        struct sockaddr_in sin;
        sin.sin_family=AF_INET;
        sin.sin_port=htons(MYPORT);
        sin.sin_addr.s_addr=inet_addr(MYIP);
        if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1)
        {
                perror("bind error");
                return -1;
        }
        printf("bind success\n");

        //3、读写
        struct sockaddr_in cin;
        socklen_t socklen =sizeof(cin);
        char rbuf[128]="";
        while(1)
        {
                bzero(rbuf,sizeof(rbuf));
        if(recvfrom(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&cin,&socklen)==-1)
        {
                perror("recvfrom error");
                return -1;
        }
        printf("%s\n",rbuf);
        }


        close(sfd);
        return 0;
}
 

2.2客户端

 

#include<myhead.h>
#define MYIP "192.168.243.130"
#define MYPORT 1234
#define YOUIP "192.168.243.130"
#define YOUPORT 5678
int main(int argc, const char *argv[])
{
        //1、载体
        int cfd=socket(AF_INET,SOCK_DGRAM,0);
        if(cfd==0)
        {
                perror("socket error");
                return -1;
        }
        printf("socket success\n");
        //2、信息读写
        struct sockaddr_in sin;
        sin.sin_family=AF_INET;
        sin.sin_port=htons(MYPORT);
        sin.sin_addr.s_addr=inet_addr(MYIP);
        socklen_t socklen=sizeof(sin);

        char wbuf[128]="";
        while(1)
        {
                bzero(wbuf,sizeof(wbuf));
                printf("请输入数据》》》");
                fgets(wbuf,sizeof(wbuf),stdin);
                wbuf[strlen(wbuf)-1]=0;

        if(sendto(cfd,wbuf,sizeof(wbuf),0,(struct sockaddr*)&sin,socklen)==-1)
        {
                perror("sendto error");
                return -1;
        }

        printf("发送成功\n");

        }

        return 0;
}
 

3思维导图 

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值