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

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

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

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

第一篇的UDP链接
服务端代码server_tcp.c:

在这里插入代码片#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define LISTENQ 20//等待接受的连接队列长度
#define MAXLINE 100
void str_echo(int sockfd){
        ssize_t n;
        char buf[MAXLINE];
again:
        while((n=read(sockfd,buf,MAXLINE))>0){
                write(sockfd,buf,n);
        }
        if(n<0&&errno==EINTR)
                goto again;
        else if(n<0){
                perror("fail to readn");
                exit(EXIT_FAILURE);
        }

}
int main(int argc, char **argv){
        int listenfd,connfd;
        socklen_t clilen;
        struct sockaddr_in cliaddr,servaddr;
        listenfd=socket(AF_INET,SOCK_STREAM,0);//监听套接字
        memset(&servaddr,0,sizeof(servaddr));
        servaddr.sin_family=AF_INET;
        servaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
        servaddr.sin_port = htons(1234);
        bind(listenfd,(struct sockaddr *) &servaddr,sizeof(servaddr));//绑定
        listen(listenfd,LISTENQ);//监听连接请求并把它们放入队列
        for(;;){
                clilen=sizeof(cliaddr);
                //从队列中取出连接请求,如接受就分配一个新的临时套接字给它
                connfd=accept(listenfd,(struct sockaddr *) &cliaddr, &clilen);
                str_echo(connfd);
        }
}

客户端代码client_tcp.c:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define LISTENQ 20
#define MAXLINE 100
void str_cli(FILE *fp, int sockfd)
{
        char sendline[MAXLINE], recvline[MAXLINE];
        while(fgets(sendline,MAXLINE,fp)!=NULL){
                write(sockfd,sendline,strlen(sendline));
                if(read(sockfd,recvline,MAXLINE)==0){
                        printf("server terminated prematurely");
                        exit(EXIT_FAILURE);
                }
                fputs(recvline,stdout);
        }
}
int main(int argc, char **argv){
        int sockfd;
        struct sockaddr_in servaddr;
        if(argc!=2){
                printf("error inputn");
                exit(EXIT_FAILURE);
        }
        sockfd=socket(AF_INET,SOCK_STREAM,0);
        memset(&servaddr,0,sizeof(servaddr));
        servaddr.sin_family=AF_INET;
        servaddr.sin_port=htons(1234);
        inet_pton(AF_INET,argv[1],&servaddr.sin_addr);
        connect(sockfd, (struct sockaddr *) &servaddr,sizeof(servaddr));
        str_cli(stdin,sockfd);
}


再补个UDP的:

明天再来试试能不能把那个lab做了,今天就先总结了一下这两篇博客里的知识点

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

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

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