socket函数

linux网络编程之bind函数

与世无争的帅哥 提交于 2019-12-23 03:45:49
NAME bind - bind a name to a socket SYNOPSIS #include <sys/socket.h> int bind(int socket, const struct sockaddr *address, socklen_t address_len); DESCRIPTION The bind() function shall assign a local socket address address to a socket identified by descriptor socket that has no local socket address assigned. Sockets created with the socket() function are initially unnamed; they are identified only by their address family. The bind() function takes the following arguments: socket Specifies the file descriptor of the socket to be bound. address Points to a sockaddr structure containing the

Socket网络编程总结

拜拜、爱过 提交于 2019-12-23 03:43:14
1.sockaddr结构体   sockaddr结构体包含了网络地址和端口的一些数据。以下三个函数实现了字符串转sockaddr结构体的功能。 1 int inet_aton(const char *strptr, struct in_addr *addrptr); 2 in_addr_t inet_addr(const char *strptr); 3 int inet_pton(int family, const char *strptr, void *addrptr);   in_addr转字符串的函数: 1 char *inet_ntoa(struct in_addr inaddr); 2 const char *inet_ntop(int family, const void *addrptr, char *strptr, size_t len); 2.连接时的相关函数,首先是server端   int sockfd(int family, int type, int protocol)   family是指明是IPV4还是IPV6的参数,平常我们用的IPV4是AF_INET。type是指的是面向连接还是数据包的选项,分别是SOCK_STREAM以及SOCK_DGRAM。protocal是协议名,一般默认为0即可。   int bind(int sockfd, const

Memcached学习(一)--网络模型

眉间皱痕 提交于 2019-12-21 07:12:00
1、Memcached的网络模型   Memcached的网络模型是基于Libevent网络库开发的,同时Memcached采用多线程的工作方式,工作线程和主线程之间采用pipe进行通信。Memcached的网络线程模型主要涉及两个主要文件: memcached.c 和 thread.c 文件。 Memcached的网络模型流程大致如下: 1、memcached会在main函数中创建主线程的event_base,将监听端口的socket注册到主线程的event_base,由主线程来监听和接受客户端连接。 2、main函数创建主线程的同时,也会创建N个工作线程,每个工作线程都拥有各自的event_base 和LIBEVENT_THREAD数据结构来存储线程的信息(线程基本信息、线程队列、pipe文件描述符)。工作线程会将pipe管道的接收端 fd 注册到自己的event_base。 3、当有新连接建立时,主线程会通过accept 函数来与客户端建立新连接,同时将新连接相关的信息填入CQ_ITEM结构并放入工作线程的conn_queue队列,同时向选定的工作线程的管道写入字符,以此触发工作线程的libevent事件。 4、主线程是通过求余数的方式来选择线程池中的一个工作线程,工作线程得到通知后,会从conn_queue队列中取出CQ_ITEM

Go语言基础之网络编程

♀尐吖头ヾ 提交于 2019-12-20 12:46:23
现在我们几乎每天都在使用互联网,我们前面已经学习了如何编写Go语言程序,但是如何才能让我们的程序通过网络互相通信呢?本章我们就一起来学习下Go语言中的网络编程。 关于网络编程其实是一个很庞大的领域,本文只是简单的演示了如何使用net包进行TCP和UDP通信。如需了解更详细的网络编程请自行检索和阅读专业资料。 互联网协议介绍 互联网的核心是一系列协议,总称为”互联网协议”(Internet Protocol Suite),正是这一些协议规定了电脑如何连接和组网。我们理解了这些协议,就理解了互联网的原理。由于这些协议太过庞大和复杂,没有办法在这里一概而全,只能介绍一下我们日常开发中接触较多的几个协议。 互联网分层模型 互联网的逻辑实现被分为好几层。每一层都有自己的功能,就像建筑物一样,每一层都靠下一层支持。用户接触到的只是最上面的那一层,根本不会感觉到下面的几层。要理解互联网就需要自下而上理解每一层的实现的功能。[osi七层模型] 如上图所示,互联网按照不同的模型划分会有不用的分层,但是不论按照什么模型去划分,越往上的层越靠近用户,越往下的层越靠近硬件。在软件开发中我们使用最多的是上图中将互联网划分为五个分层的模型。 接下来我们一层一层的自底向上介绍一下每一层。 物理层 我们的电脑要与外界互联网通信,需要先把电脑连接网络,我们可以用双绞线、光纤、无线电波等方式。这就叫做”实物理层”

Socket网络编程--Libev库学习(3)

僤鯓⒐⒋嵵緔 提交于 2019-12-19 09:00:33
  这一小节继续讲解各个观察器(Watcher).   上一小节已经讲解了ev_io(IO可读可写观察器),ev_stat(文件属性变化观察器),ev_signal(信号处理观察器),ev_timer(定时器),ev_periodic(周期任务处理),ev_child(子进程状态变化观察器)。这一小节准备讲ev_fork(创建的进程时的观察器),ev_async(异步调用观察器),ev_cleanup(event loop退出时触发事件),ev_prepare(每次event loop之前事件),ev_check(每次event loop之后事件),ev_idle(每次event loop空闲触发事件).   ev_async (ev_async当ev_async_send通过watcher调用时调用,触发EV_ASYNC) 1 #include <stdio.h> 2 #include <string.h> 3 #include <unistd.h> 4 #include <stdlib.h> 5 #include <ev.h> 6 7 ev_async async_watcher; 8 9 static void sigint_callback(struct ev_loop *loop,ev_signal * w,int revents) 10 { 11 if(revents

python socket对象内建方法

淺唱寂寞╮ 提交于 2019-12-17 04:12:58
服务器端套接字函数 s.bind() 绑定地址(主机,端口号对)到套接字 s.listen() 开始TCP 监听 s.accept() 被动接受TCP 客户的连接,(阻塞式)等待连接的到来 客户端套接字函数 s.connect() 主动初始化TCP 服务器连接 s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛异常 公共用途的套接字函数 s.recv() 接收TCP 数据 s.send() 发送TCP 数据 s.sendall() 完整发送TCP 数据 s.recvfrom() 接收UDP 数据 s.sendto() 发送UDP 数据 s.getpeername() 连接到当前套接字的远端的地址 s.getsockname() 当前套接字的地址 s.getsockopt() 返回指定套接字的参数 s.setsockopt() 设置指定套接字的参数 s.close() 关闭套接字 s.setblocking() 设置套接字的阻塞与非阻塞模式 s.settimeout()a 设置阻塞套接字操作的超时时间 s.gettimeout()a 得到阻塞套接字操作的超时时间 面向文件的套接字的函数 s.fileno() 套接字的文件描述符 s.makefile() 创建一个与该套接字关连的文件 来源: https://www.cnblogs.com

基于epoll的聊天室程序

风格不统一 提交于 2019-12-17 03:11:37
epoll相对于poll和select这两个多路复用的I/O模型更加的高效。epoll的函数很简单,麻烦的地方在于水平触发和边沿触发。 用张图来说明下 ET(边沿)只是在状态反转时触发,比如从不可读到可读。而LT(水平)就是如果可读,就会一直触发。所以在使用ET的时候要做一些额外的处理,比如可读的,一直把缓冲区读完,进入不可读状态,下次来数据才会触发。 下面贴出代码,只是一个简单的练习的例子 socketheads.h C++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #ifndef SOCKETHEADS_H #define SOCKETHEADS_H #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <unistd.h> #include <netinet/in.h> #include <fcntl.h> #include <netinet/in.h> #include <arpa/inet.h> #endif //SOCKETHEADS_H zepoll.h C++ 1 2 3 4 5 6 7 8 9 10 11 12

Socket无连接简单实例

余生颓废 提交于 2019-12-16 22:34:26
使用无连接的套接字,我们能够在自我包含的数据包里发送消息,采用独立的读函数读取消息,读取的消息是使用独立的发送函数发送的。但是UDP数据包不能保证可靠传输,存在许多的因素,比如网络繁忙等等,都有可能阻止数据包到达指定的目的地。 (1) UDP的简单应用: 由于UDP是一种无连接的协议。因此,为了使服务器应用能够发送和接收UDP数据包,则需要做两件事情: 创建一个Socket对象; 将创建的套接字对象与本地IPEndPoint进行绑定。 完成上述步骤后,那么创建的套接字就能够在IPEndPoint上接收流入的UDP数据包,或者将流出的UDP数据包发送到网络中任意其他设备商。使用UDP进行通信时,不需要TCP连接。因为异地的主机之间没有建立连接,所以UDP不能使用标准的Send()和Receive()t套接字方法,而是使用两个其他的方法:SendTo()和ReceiveFrom()。 SendTo()方法指定要发送的数据,和目标机器的IPEndPoint。该方法有多种不同的使用方法,可以根据具体的应用进行选择,但是至少要指定数据包和目标机器。如下: SendTo(byte[] data,EndPoint Remote) ReceiveFrom()方法同SendTo()方法类似,但是使用EndPoint对象声明的方式不一样。利用ref修饰,传递的不是一个EndPoint对象

WebSocket

ぃ、小莉子 提交于 2019-12-16 19:20:04
一 . WebSocket原理   1.1.背景 WebSocket 是基于Http 协议的改进,Http 为无状态协议,基于短连接,需要频繁的发起请求,第二 Http 只能客户端发起请求,服务端无法主动请求。   1.2.相同点 1.都是基于TCP的应用层协议。 2.都使用Request/Response模型进行连接的建立。 3.在连接的建立过程中对错误的处理方式相同,在这个阶段WS可能返回和HTTP相同的返回码。 4.都可以在网络中传输数据。   1.3.不同点 1.WS使用HTTP来建立连接,但是定义了一系列新的header域,这些域在HTTP中并不会使用。 2.WS的连接不能通过中间人来转发,它必须是一个直接连接。 3.WS连接建立之后,通信双方都可以在任何时刻向另一方发送数据。 4.WS连接建立之后,数据的传输使用帧来传递,不再需要Request消息。 5.WS的数据帧有序。 6.WebSocket 分为握手和数据传输   1.4.WebSocket的握手 客户端的握手如下: GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Origin: http://example

TCP通信(零)——基本知识

人盡茶涼 提交于 2019-12-16 16:25:01
基本的OSI模型如下: TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。 TCP的缺点: 慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。 而且,因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击。 UDP的优点: 快,比TCP稍安全 UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。但UDP也是无法避免攻击的,比如:UDP Flood攻击…… UDP的缺点: 不可靠,不稳定 因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。 基于上面的优缺点,那么: 什么时候应该使用TCP: 当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP