博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TCP socket 多线程 并发服务器(发送)与客户端(接收)
阅读量:5076 次
发布时间:2019-06-12

本文共 834 字,大约阅读时间需要 2 分钟。

实现功能:Ubuntu上通过多线程实现服务器并发给客户端发送文件,携带包头,根据包头信息命名新文件。适用于短连接。

问题小结:

01. 调用嵌套在结构体中的结构体char 数组成员时,需要动态分配内存。

02. 使用select() 监听socket变化。select() 其中三个参数分别监听读,写,出错。

03. 每条线程在同时发送文件时,需要使用独立的变量,如accept(), FILE *fd, *buff 等,用结构数组 + 标号实现。

04. struct stat stat_buff.st_size 可得到文件的字节大小。

05. 文件使用“wb+” 创建之后写数据用“rb+" 。

*06. 由于可能接收缓冲区存满,本一次接收1096字节数据,结果分成两次819和277字节,导致错误接收和解析,处理办法为判断每次接收到的数据是否携带包头。

07. 多线程中,在主线程中某一动态分配的对象同时被两个线程使用,一个线程释放了该对象,而另一个线程继续对该对象进行操作,会造成使用了无效指针错误。

08. 函数中的局部指针变量不可返回,只有静态变量,全局变量,动态分配的指针变量可以返回。

**09. 创建线程函数中:

pthread_create(&st_up_manages[index].m_thread_attrs.m_tid, NULL,server_Thread, (void *)&st_up_manages[index]);

    线程ID和线程函数的参数均需要独立变量,由结构数组分别分配。

总结:熟悉了socket 创建以及收发过程;对c 语言中数组,指针,字符串操作,多线程理解加深;动态开辟的空间,创建的资源在程序退出(包括非正常)时要全部释放;提高效率。

  渺小如蝼蚁,学习永无止境。

  渴望把程序写成艺术品,哈哈。

转载于:https://www.cnblogs.com/bobojiang/p/7419516.html

你可能感兴趣的文章
Python3基础笔记_迭代器
查看>>
Python+selenium打开网页
查看>>
dedecms 织梦点击图片进入下一页代码
查看>>
[转]IOS UIView 之属性篇
查看>>
日志 制作--和查看
查看>>
redis 操作指令
查看>>
js中的this(二)
查看>>
Linux的NFS配置
查看>>
Codeforces 652F Ants on a Circle
查看>>
bzoj 1483 链表 + 启发式合并
查看>>
struts2完成增删改查
查看>>
Android开发之资源文件存储
查看>>
SQL 报表 --简易进销系统
查看>>
Servlet(1)
查看>>
mysql高级:触发器、事务、存储过程、调用存储过程
查看>>
multitask learning 相关论文资源
查看>>
对X86汇编的理解与入门
查看>>
看破欧拉函数的奥秘
查看>>
LeetCode-Closest Binary Search Tree Value II
查看>>
cdh 的 oozie时间校准
查看>>