关于socket
使用socket常用的操作就是读写,recv和send,与read、write对应,但多了一个flag位可以设定阻塞等,一些细节以后再探。目前使用时发现read往往不能将数据完整读出,可能是调用时内核缓冲区的数据只到了一部分,调用时就将到达的部分返回,造成后续数据没读到。鉴于unix i/o的操作比较麻烦,推荐使用标准i/o,当然,如果玩的溜了unix i/o应该更省资源。
用fdopen将socket fd转化为FILE *fp,就可以使用标准i/o进行操作了,主要为fread,fwrite和fgets,fputs两组,当然还有格式化的fscanf,fprinf,还有对内存操作的sscanf,sprinf,扯远了。标准i/o是对read,write进行封装,多了一层用户态缓冲区,多了fseek定位等功能,便于操作。标准i/o默认为全缓冲(_IOFBF),stderr为不缓冲(_IONBF),终端为行缓冲(_IOLBF),当然也可以用setvbuf自己指定缓冲区的地址,大小和模式。如果直接设定行缓冲可以用setvbuf(fp, NULL, _IOLBF, 0),就可以用fgets,fputs操作,这两个是默认行缓冲存取,不先设定的话,使用会有意想不到的问题。默认的全缓冲一般用fread和fwrite操作。
重点:标准i/o和流的类型有很大关系,对于socket这种流,输出流在缓冲模式下不会直接发送,需要fflush刷新。或者之后接读取输入,i/o会自己调用fflush刷新之前的输出。fclose也会刷新,所以一般读不会有问题,问题一般在写。
关于socket的更多相关文章
- socket读写返回值的处理
在调用socket读写函数read(),write()时,都会有返回值.如果没有正确处理返回值,就可能引入一些问题 总结了以下几点 1当read()或者write()函数返回值大于0时,表示实际从缓冲 ...
- Socket聊天程序——Common
写在前面: 上一篇记录了Socket聊天程序的客户端设计,为了记录的完整性,这里还是将Socket聊天的最后一个模块--Common模块记录一下.Common的设计如下: 功能说明: Common模块 ...
- Socket聊天程序——客户端
写在前面: 上周末抽点时间把自己写的一个简单Socket聊天程序的初始设计和服务端细化设计记录了一下,周二终于等来毕业前考的软考证书,然后接下来就是在加班的日子度过了,今天正好周五,打算把客户端的详细 ...
- Socket聊天程序——服务端
写在前面: 昨天在博客记录自己抽空写的一个Socket聊天程序的初始设计,那是这个程序的整体设计,为了完整性,今天把服务端的设计细化记录一下,首页贴出Socket聊天程序的服务端大体设计图,如下图: ...
- Socket聊天程序——初始设计
写在前面: 可能是临近期末了,各种课程设计接踵而来,最近在csdn上看到2个一样问答(问题A,问题B),那就是编写一个基于socket的聊天程序,正好最近刚用socket做了一些事,出于兴趣,自己抽了 ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- Android Socket连接PC出错问题及解决
最近测试问题:Android 通过Socket链接电脑,ip和端口都是正确的,也在同一网段,可android端就是报异常如下: 解决办法:测试电脑的防火墙可能开着,在控制面板把防火墙打开即可.
- Linux下的C Socket编程 -- server端的继续研究
Linux下的C Socket编程(四) 延长server的生命周期 在前面的一个个例子中,server在处理完一个连接后便会立即结束掉自己,然而这种server并不科学啊,server应该是能够一直 ...
- Mono 3.2.3 Socket功能迎来一稳定的版本
由于兴趣自己业余时间一直在搞.net下面的通讯应用,mono的存在得以让.NET程序轻松运行在Linux之下.不过经过多尝试Socket相关功能在Mono下的表现并不理想.不管性能还是吞吐能力方面离我 ...
- Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!
随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如 ...
随机推荐
- Busybox镜像
使用docker多少还是要知道一些Busybox的知识,下面转载自https://blog.csdn.net/chengqiuming/article/details/79313539 一 简介 Bu ...
- python32模拟鼠标和键盘操作
前言Windows pywin32允许你像vc一样的形式来使用python开发win32应用.代码风格可以类似win32 sdk,也可以类似MFC,由你选择.如果你仍不放弃vc一样的代码过程在pyth ...
- JeeCMS v7 SSRF导致任意文件写入
前言: 学习大佬的思路. from先知社区:https://xz.aliyun.com/t/4809 00X1: 是/ueditor/getRemoteImage.jspx 接口 通过构造upfile ...
- 数据库-PLSQL登录oracle数据库卡死(未响应)解决方法
上次重装系统后重新安装了oracle和PLSQL,哪知道PLSQL登录不了,一登录就未响应,但如果不登录就不卡死,直接就进去了.在网上查了很多解决方法,都没有用. 后来在百度文库找到解决办法,重启Or ...
- celery定时任务
from celery import Celery from datetime import timedelta app = Celery('gx', broker='redis://localhos ...
- 页面中关于bootstrap框架的增删改查使用
bootstrap是一个简单又好用的前端框架 1.bootstrap 初始化 表格显示 2.自带的查询表单(需要配置要查询的条件 对应实体类) 3.工具(增加和查询) 4.查询方法 5.增加方法 ...
- Python课程第二天作业
一.统计字符串格式 要求: # 1.统计元组中所有数据属于字符串的个数,提示: isinstance() # 数据: t1 = (1, 2, '3', '4', 5, '6') # 结果: 3 代码 ...
- Python全栈开发记录_第七篇(模块_time_datetime_random_os_sys_hashlib_logging_configparser_re)
这一篇主要是学习python里面的模块,篇幅可能会比较长 模块的概念:在Python中,一个.py文件就称之为一个模块(Module). 模块一共三种: python标准库 第三方模块 应用程序自定义 ...
- 虚拟机上安装django链接Pycharm(版本差异有所差异)
第一,启动虚拟机,配置好虚拟机 第二,workon查看安装那些虚拟环境 第三,创建虚拟环境命令:mkvirtualenv -p /usr/bin/ python3 my_djangou 第四,进入虚拟 ...
- bochs的bochsrc说明
########################################## Configuration file for bochs ################### ...