TCP socket 多线程 并发服务器(发送)与客户端(接收)
实现功能: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 语言中数组,指针,字符串操作,多线程理解加深;动态开辟的空间,创建的资源在程序退出(包括非正常)时要全部释放;提高效率。
渺小如蝼蚁,学习永无止境。
渴望把程序写成艺术品,哈哈。
TCP socket 多线程 并发服务器(发送)与客户端(接收)的更多相关文章
- Python Socket多线程并发
1.SocketServer模块编写的TCP服务器端代码 Socketserver原理图 服务端: import SocketServer #导入SocketServer,多线程并发由此类实现 cla ...
- Java Socket 服务端发送数据 客户端接收数据
服务端: package com.thinkgem.wlw.modules.api.test.socket; /** * @Author: zhouhe * @Date: 2019/4/8 9:30 ...
- Python2 socket 多线程并发 TCPServer Demo
#coding=utf-8 import socket import threading,getopt,sys,string opts, args = getopt.getopt(sys.argv[1 ...
- Python2 socket 多线程并发 ThreadingTCPServer Demo
# -*- coding:utf-8 -*- from SocketServer import TCPServer, StreamRequestHandler import traceback cla ...
- python tcp socket 多线程
不多说,直接上代码 client.py #!/usr/bin/python import socket,sys,string host="localhost" port=8000 ...
- socket编程和并发服务器
socket这个词可以表示很多概念: 在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”就称为socket. 在TCP协议中,建立连接的两个进程 ...
- TCP/IP协议学习(四) 基于C# Socket的Web服务器---静态资源处理
目录 1. C# Socket通讯 2. HTTP 解析引擎 3. 资源读取和返回 4. 服务器测试和代码下载 Web服务器是Web资源的宿主,它需要处理用户端浏览器的请求,并指定对应的Web资源返回 ...
- socket 中午吃的啥 socket 并发服务器 fork
http://www.cnblogs.com/thinksasa/archive/2013/02/26/2934206.html zh.wikipedia.org/wiki/網路插座 在作業系統中,通 ...
- Linux下几种并发服务器的实现模式
Linux下的几种并发服务器的设计模式 1>单线程或者单进程 相当于短链接,当accept之后,就开始数据的接收和数据的发送,不接受新的连接,即一个server,一个client 不存在并发. ...
随机推荐
- Mongodb集群【三】
Mongodb常用三种集群 1 主从(Master/Slave) 不推荐,但是mongodb依然保留有.一主多从,不支持链式结构.简单主从,没有裁仲者不能自动恢复. 2 副本集(Relica Set) ...
- 第十章:Python の 网络编程基础(二)
本課主題 Python中的作用域补充 socketserver 源码 线程的介绍和操作实战 进程的介绍和操作实战 协程的介绍和操作实战 本周作业 Python中的作用域补充 Python世界里沒有块级 ...
- python并发编程之多进程
一同步与异步 同步执行:一个进程在执行任务时,另一个进程必须等待执行完毕,才能继续执行 异步执行:一个进程在执行任务时,另一个进程无需等待其执行完毕就可以执行,当有消息返回时,系统会提醒后者进行处理, ...
- Shell和命令基础
什么是Shell Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口(命令解析器),Shell接收用户输入的命令并把它送入到内核去执行,结构如下图 Shell的功能 Shell最重要的 ...
- wifipineapple插件:codeInject的使用
如果在中间人攻击的时候, 能在用户的网页中插入任意代码, 可以说已经完成一半了 wifipineapple有个codeInject插件, 可以让连上这个网络所有设备浏览网页的时候, 在网页中插入任意h ...
- 卸载CentOS7-x64自带的OpenJDK并安装Sun的JDK7的方法
第一步:查看并卸载CentOS自带的OpenJDK 安装好的CentOS会自带OpenJdk,用命令 java -version ,会有下面的信息: java version "1.6.0& ...
- clear命令新认识
学习Linux的时候,最先学习的几个命令中有一个就是clear,中文翻译为:清屏. 以前的理解都是按照字面进行解读的,清除屏幕上多余的内容. 但是实际上真的如此么? 原来屏幕是: 运行clear命令: ...
- python模块-OS模块详解
1.按字母分 os相关的函数:143个.按字母排序如下: ['abort', 'access', 'altsep', 'chdir', 'chmod', 'chown', 'chroot', 'clo ...
- springboot开启access_log日志输出
由于在调试时需要查看access_log日志,但是springboot默认并没有开启,因此查看了一下文档,在springboot的配置文件中添加如下设置,即可将日志输出当磁盘文件中以供查看. #日志开 ...
- iframe标签里面的页面元素只读
iframe标签里面的页面元素只读,可以通过设置一个只读的透明div进行遮罩实现. html代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 ...