IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 2021-10-06Linux套接字socket编程入门(二)TCP模式回音代码 -> 正文阅读

[系统运维]2021-10-06Linux套接字socket编程入门(二)TCP模式回音代码

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

在这里插入代码片#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#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 read\n");
                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);/* process the request */
        }
}

客户端代码client_tcp.c:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#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 input\n");
                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做了,今天就先总结了一下这两篇博客里的知识点
在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 14:11:49  更:2021-10-07 14:14:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:43:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码