栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

2021-10-06Linux套接字socket编程入门(一)UDP模式回音代码

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-06Linux套接字socket编程入门(一)UDP模式回音代码

黄群老师的计算机网络的第一个lab是不算分的,但是国庆很有时间就干脆想试一试,但是发现之前因为没有写过套接字相关代码所以有些困难。参考了黄群老师的客户端服务器模式下利用套接字编写简单的回音功能的PPT(说实在的那个PPT的代码复制进vim里居然各种格式错误),再加上参考了Linux套接字演示
这篇文章,可算实现了第一个套接字网络编程程序。
上代码:
客户端代码client.c:

#include
#include
#include
#include 
#include 
#include
#include 
#define MAXLINE 100//每次传输的最大字节
int main(int argc,char** argv){
        int sockfd,n;
        struct sockaddr_in serveraddr;
        if(argc!=2){//需要一个输出参数表示想要连接的ip地址
                printf("error inputn");
                exit(EXIT_FAILURE);
        }
        char sendline[MAXLINE],recvline[MAXLINE+1];
        sockfd=socket(AF_INET,SOCK_DGRAM,0);//表示以UDP形式生成套接字描述符
        memset(&serveraddr,0,sizeof(serveraddr));//内存空间清零
        serveraddr.sin_family=AF_INET;//地址家族,通常都是AF_INET代表IPv4
        
        inet_pton(AF_INET,argv[1],&serveraddr.sin_addr);
        serveraddr.sin_port=htons(1234);
        while(fgets(sendline,MAXLINE,stdin)!=NULL){//从客户端标准输入输入
                sendto(sockfd,sendline,strlen(sendline),0,(struct sockaddr *)&serveraddr,sizeof(serveraddr));
                n=recvfrom(sockfd,recvline,MAXLINE,0,NULL,NULL);
                recvline[n]=0;
                fputs(recvline,stdout);//从客户端标准输出输出

        }
        exit(0);
}

服务端代码server.c:

#include
#include
#include
#include 
#include 
#define MAXLINE 100
int main(int argc, char **argv){
        char mesg[MAXLINE];
        int sockfd, n, len;
        struct sockaddr_in cliaddr, servaddr;

        sockfd=socket(AF_INET,SOCK_DGRAM,0);
        memset(&servaddr,0,sizeof(servaddr));
        servaddr.sin_family=AF_INET;
        servaddr.sin_addr.s_addr=inet_addr("127.0.0.1");//ip地址
        servaddr.sin_port=htons(1234);//端口号
		
        bind(sockfd,(struct sockaddr *) &servaddr, sizeof(servaddr));

        for(; ;) {//循环接受客户端的输入并回传
                len=sizeof(cliaddr);
                 //recvfrom接收sockfd上的输入,存进mesg中,把客户端信息也保存进cliaddr中
                n=recvfrom(sockfd,mesg,MAXLINE,0,(struct sockaddr*)&cliaddr,&len);
               //发送回客户端
                sendto(sockfd,mesg,n,0,(struct sockaddr*)&cliaddr,len);
        }
}

这几个头文件我都不算了解,通过链接里的抄过来的,
然后
gcc server.c -o server
gcc client.c -o client
./server
./client 127.0.0.1
就可以在client端传数据了,会传给服务端再被回传打印:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/296691.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号