华清远见作业第三十天——网络编程(第五天)

这篇具有很好参考价值的文章主要介绍了华清远见作业第三十天——网络编程(第五天)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

思维导图:

华清远见作业第三十天——网络编程(第五天),华清远见作业,网络,c语言文章来源地址https://www.toymoban.com/news/detail-806079.html

 使用selsect实现TCP客户端的并发

代码

#include<a.h>
#define SER_PORT  8888             //服务器端口号
#define SER_IP "192.168.125.50"    //服务器ip地址
#define CLI_PORT 6666                //客户端的端口号
#define CLI_IP "192.168.125.50"       //客户端ip地址


int main(int argc, const char *argv[])
{
	//1、创建用于通信的套接字文件描述符
    int cfd = -1;
    cfd = socket(AF_INET, SOCK_STREAM, 0);
    if(cfd == -1)
    {
        perror("socket error");
        return -1;
    }
    printf("cfd = %d\n", cfd);            //3

    //2、绑定(可选)
    //2.1 填充地址信息结构体 
    struct sockaddr_in cin;
    cin.sin_family = AF_INET;
    cin.sin_port = htons(CLI_PORT);
    cin.sin_addr.s_addr = inet_addr(CLI_IP);
    //2.2绑定
    if(bind(cfd, (struct sockaddr*)&cin, sizeof(cin)) == -1)
    {
        perror("bind error");
        return  -1;
    }
    printf("bind  success\n");
    
    //3、连接服务器
    //3.1 填充服务器地址信息结构体
    struct sockaddr_in sin;
    sin.sin_family =     AF_INET;
    sin.sin_port =         htons(SER_PORT);
    sin.sin_addr.s_addr = inet_addr(SER_IP);
    //3.2 连接
    if(connect(cfd, (struct sockaddr*)&sin, sizeof(sin)) == -1)
    {
        perror("connect error");
        return -1;
    }
    printf("连接成功\n");
    //准备一个文件描述器
	fd_set readfds,tempfds;//临时集合
	//清空容器
	FD_ZERO(&readfds);
	//将要检测的文件放入集合中
	FD_SET(0,&readfds);
	FD_SET(cfd,&readfds);
	int res=-1; //接收select函数对容器的中文件描述符号检测的返回值


    //4、收发数据
    char wbuf[128]=""; //终端
	char rbuf[128]=""; //接收服务器发来的消息
    while(1)
    {
		tempfds=readfds; //存储一份数据
		//使用select函数对容器中的文件描述符进行检测
		res=select(cfd+1,&tempfds,NULL,NULL,NULL);
		if(res==-1)
		{
			perror("select error");
			return -1;
		}else if(res==0)
		{
			printf("timeout\n");
			return -1;
		}
		//判断终端是否发生事件
		if(FD_ISSET(0,&tempfds))
		{
		
		
			//清空数组
			bzero(wbuf, sizeof(wbuf));

			printf("请输入>>>");
			fgets(wbuf, sizeof(wbuf), stdin);   //从终端输入数据
			wbuf[strlen(wbuf)-1] = 0;          //将换行改为'\0'

			//发送给服务器
			send(cfd, wbuf, sizeof(wbuf), 0);
			printf("发送成功\n");
			if(strcmp(wbuf, "quit") == 0)
			{
				break;
			}
		}
		//判断是否是服务器发来的消息触发
		if(FD_ISSET(cfd,&tempfds))
		{
		
			//清空数组
			bzero(rbuf,sizeof(rbuf));
			//接收服务器发来的消息
			recv(cfd, rbuf, sizeof(rbuf), 0);
			printf("[%s:%d]:%s\n", SER_IP, SER_PORT, rbuf);
		}
    }

    //5、关闭套接字
    close(cfd);

    return 0;
}

到了这里,关于华清远见作业第三十天——网络编程(第五天)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 华清远见 day03

    for 循环嵌套 输出一个字符; 输出一个字符串;

    2024年02月07日
    浏览(47)
  • 华清远见 week2 day01

    产生随机数

    2024年02月08日
    浏览(51)
  • 网络编程 作业(4.6)

    作业: 请简述字节序的概念,并用联合体(共用体)的方式验证计算机是大端还是小端?

    2023年04月13日
    浏览(23)
  • 网络编程day6作业

    完成网络聊天室编写 ser cli 思维导图:https://mubu.com/app/edit/home/5fnWgXpb5GT#m

    2024年02月09日
    浏览(30)
  • 【网络编程】Linux网络编程基础与实战第三弹——网络名词术语

    数据包从源地址到目的地址所经过的路径,由一系列路由节点组成。 某个路由节点为数据包选择投递方向的选路过程。 路由器工作原理 路由器是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号的设备。

    2024年02月08日
    浏览(36)
  • 《TCP IP网络编程》第三章

    3.1 分配给套接字的IP地址与端口号         IP 是 Internet Protocol(网络协议)的简写,是为收发网络数据而分配给计算机的值。端口号并非赋予计算机的值,而是为了区分程序中创建的套接字而分配给套接字的序号。              为使计算机连接到网络并收发数据,必

    2024年02月13日
    浏览(29)
  • UNIX网络编程卷一 学习笔记 第三十一章 流

    在大多数源自SVR 4的内核中,X/Open传输接口(X/Open Transport Interface,XTI,是独立于套接字API的另一个网络编程API)和网络协议通常就像终端IO系统那样也使用流系统(STREAMS system)实现。 我们将使用传输提供者接口(Transport Provider Interface,TPI)开发一个简单的TCP客户程序,TP

    2024年02月09日
    浏览(55)
  • UNIX网络编程卷一 学习笔记 第三十章 客户/服务器程序设计范式

    开发一个Unix服务器程序时,我们本书做过的进程控制: 1.迭代服务器(iterative server),它的适用情形极为有限,因为这样的服务器在完成对当前客户的服务前无法处理已等待服务的新客户。 2.并发服务器(concurrent server),为每个客户调用fork派生一个子进程。传统上大多U

    2024年02月09日
    浏览(38)
  • (Java高级教程)第三章Java网络编程-第七节2:Servlet API和综合案例

    前面说过,Servlet就是Tomcat这个HTTP服务器提供给Java的一组API,来完成构建动态页面等任务。Servlet中涉及的API非常多,这里我们只关注以下三个即可,其余的可在工作中获得遇到具体场景再学习使用 HttpServlet HttpServletRequest HttpServletResponse HttpServlet :它提供了处理基于HTTP协议的

    2024年02月09日
    浏览(35)
  • 嵌入式培训机构四个月实训课程笔记(完整版)-Linux网络编程第三天-UDP编程(物联技术666)

    技术咨询:wulianjishu666 上午:UDP网络编程  下午:UDP聊天程序的设计、select超时控制 教学内容: 1、udp和tcp都是在传输层上的协议,它们的区别 UDP协议与TCP协议的差异: TCP:面向连接,可靠 UDP:无连接,不可靠 ----------------------- UDP协议的优势: 支持广播和多播 UDP没有连接

    2024年01月16日
    浏览(81)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包