sock编程

1.port 1-65535(0保留)

2.UDP发送消息最大(65507字节)

3.ipv4

struct sockaddr//netinet/in.h
{
    sa_family_t sa_family;
    char sa_data[14];
};
struct in_addr
{
    uint32_t s_addr;
};
struct sockaddr_in
{
    sa_family_t sin_family;
    in_port_t sin_port;
    struct in_addr sin_addr;
    char sin_zero[8];
};

sockaddr_in只是sockaddr结构中数据详细视图,在用到sockaddr的地方都将sockaddr_in 转为sockaddr

4.inet_pton(AF_INET,const char* ip,void *dst)//arpa/inet.h

将ip地址(字符串)转为指定二进制(AF_INET),保持在第三个参数中,失败返回0(无效ip地址)/负数(错误)

5.sockaddr_in.sin_port= htons(int port) //netinet/in.h

将端口(整数)转为网络字节

6.ssize_t send(socket,void* msg,size_t msgLen,int flag)//sys/socket.h

默认行为阻塞到发送所有数据为止,flag=0为默认行为,失败返回-1

7.ssize_t recv(socket,void* buf,size_t bufLen,int flag) //sys/socket.h

recv默认阻塞到至少传输一些字符(一般为一个字符),flag= 0为默认行为,失败返回-1,返回值为0指示另一端关闭tcp链接,bufLen应加1为null做预留空间

8.int getaddrinfo(const char *hoststr,const char* servicestr,const struct addrinfo* hints,struct addrinfo **result) //netdb.h

可进行域名解析,且不需要将ip或者port转为网络字节(需要转换的整形变量),成功返回0,失败返回非0;可用来将ip或者port转为网络字节(addrinfo.ai_addr)

可用来获取本机ip,将addrinfo.ai_flag= AI_PASSIVE

9.send/sendto 区别

send()调用返回时,只知道数据已经复制进缓冲区中进行传输,数据还可能会或者不会实际地进行传输(缓冲区为重传做准备)

sendto()调用返回时,就已经把消息传递给底层信道以进行传输

10.recvfrom()

假设接收n个字节,而消息为m个字节,当n<m时,剩余的字节将被悄悄地抛弃,而不会向接收程序指示

recvfrom()标志位设MSG_PEEK可预读第一个数据块

11.字节排序

大端:从高位开始传递;小端:从低位开始传递;

网络字节:大端字节顺序;

主机字节排序可能是大端也可能是小端,两主机之间应协调好

12.setsockopt()

设置缓冲区的大小即使成功也不一定设置成功,它只是提示系统,用户所期望的值

13.

多个进程拥有同一个socket句柄,若其中一个close,其他不做任何操作则socket并不会关闭(可能是引用计数)

进程:复制父进程全部状态(内存,栈,文件/套接字描述符等)

线程:共享与父进程相同的地址空间(代码/数据)

时间: 2024-07-29 20:21:16

sock编程的相关文章

DELPHI下的SOCK编程(转)

DELPHI下的SOCK编程      本文是写给公司新来的程序员的,算是一点培训的教材.本文不会涉及太多的编程细节,只是简单讲解在DELPHI下进行Winsock编程最好了解的知识. 题外话:我认为学习编程就如同学习外语一样,最好的方式是你先学会如何去运用它,然后才是了解它的语言特性.语法之类的东西.不过很可惜,我们以前的外语教育使用了相反的过程.软件编程也是一样,在很多人的大学阶段,你更多的是学习那些理论知识,学习“语法”,这里,我丝毫没有贬低理论知识重要性的意思.理论知识和实践是相辅相成的

DELPHI下的SOCK编程

本文是写给公司新来的程序员的,算是一点培训的教材.本文不会涉及太多的编程细节,只是简单讲解在DELPHI下进行Winsock编程最好了解的知识. 题外话:我认为学习编程就如同学习外语一样,最好的方式是你先学会如何去运用它,然后才是了解它的语言特性.语法之类的东西.不过很可惜,我们以前的外语教育使用了相反的过程.软件编程也是一样,在很多人的大学阶段,你更多的是学习那些理论知识,学习“语法”,这里,我丝毫没有贬低理论知识重要性的意思.理论知识和实践是相辅相成的,但一个恰当的学习方式,很多时候可以让学

五种I/O 模式——阻塞(默认IO模式),非阻塞(常用语管道),I/O多路复用(IO多路复用的应用场景),信号I/O,异步I/O

五种I/O 模式——阻塞(默认IO模式),非阻塞(常用语管道),I/O多路复用(IO多路复用的应用场景),信号I/O,异步I/O 五种I/O 模式:[1]        阻塞 I/O           (Linux下的I/O操作默认是阻塞I/O,即open和socket创建的I/O都是阻塞I/O)[2]        非阻塞 I/O        (可以通过fcntl或者open时使用O_NONBLOCK参数,将fd设置为非阻塞的I/O)[3]        I/O 多路复用     (I/O

C++面试考点

后端开发面试题 =================== #后端开发面试知识点大纲: ##语言类(C++): ###关键字作用解释: volatile作用 Volatile关键词的第一个特性:易变性.所谓的易变性,在汇编层面反映出来,就是两条语句,下一条语句不会直接使用上一条语句对应的volatile变量的寄存器内容,而是重新从内存中读取. Volatile关键词的第二个特性:“不可优化”特性.volatile告诉编译器,不要对我这个变量进行各种激进的优化,甚至将变量直接消除,保证程序员写在代码中

第四周课上实践验收

目录 任务一:基于winpcap的网络嗅探工具的实现 1 实践原理介绍 2 实践环境搭建 3 实现过程 4 实验截图 任务二:嗅探登录网站的账号和密码 任务三:抓取手机App登录过程数据包 实践思考 参考资料 任务一:基于winpcap的网络嗅探工具的实现 1 实践原理介绍 Windows用户态中的winpcap与Unix中的libpcap库相兼容,使用winpcap库实现网络嗅探工具的原理与Unix下使用libpcap非常的类似,具体的实现技术如下图: 根据上面的技术图可知嗅探器的实现基本的流

sock基础编程介绍

一个简单的python socket编程 一.套接字 套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象.它们允许程序接受并进行连接,如发送和接受数据.为了建立通信通道,网络通信的每个端点拥有一个套接字对象极为重要. 套接字为BSD UNIX系统核心的一部分,而且他们也被许多其他类似UNIX的操作系统包括Linux所采纳.许多非BSD UNIX系统(如ms-dos,windows,os/2,mac os及大部分主机环境)

Python Socket 编程——聊天室演示样例程序

上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和client的代码了解主要的 Python Socket 编程模型.本文再通过一个样例来加强一下对 Socket 编程的理解. 聊天室程序需求 我们要实现的是简单的聊天室的样例,就是同意多个人同一时候一起聊天.每一个人发送的消息全部人都能接收到,类似于 QQ 群的功能,而不是点对点的 QQ 好友之间的聊天.例如以下图: 图来自:http://www.ibm.com/developerworks/linux/tu

Unix 环境高级编程 (APUE) 之 网络 IPC:套接字

一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字 . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录 (四) 一起学 Unix 环境高级编程 (APUE) 之 系统数据文件和信息 (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境 (六) 一起学 Unix 环境高级编程 (APU

基于TCP协议之——socket编程

一. 套接字(socket) socket英文为插座的意思,也就是为用户提供了一个接入某个链路的接口.而在计算机网络中,一个IP地址标识唯一一台主机,而一个端口号标识着主机中唯一一个应用进程,因此"IP+端口号"就可以称之为socket. 两个主机的进程之间要通信,就可以各自建立一个socket,其实可以看做各自提供出来一个"插座",然后通过连接上"插座"的两头也就是由这两个socket组成的socket pair就标识唯一一个连接,以此来表示网