UDP的服务器端和客户端

浏览: 169 2019年08月17日
UDP中的服务器端和客户端没有连接UDP 不像 TCP,无需在连接状态下交换数据,因此基于 UDP 的服务器端和客户端也无需经过连接过程。也就是说,不必调用 listen() 和 accept() 函数。UDP 中只有创建套接字的过程和数据交换的过程。UDP服务器端和客户端均只需1个套接字TCP...

谈一谈UDP和TCP的细节

浏览: 152 2019年08月16日
TCP 是面向连接的传输协议,建立连接时要经过三次握手,断开连接时要经过四次握手,中间传输数据时也要回复 ACK 包确认,多种机制保证了数据能够正确到达,不会丢失或出错。UDP 是非连接的传输协议,没有建立连接和断开连接的过程,它只是简单地把数据丢到网络中,也不需要 ACK 包确认。UDP 传输...

socketgethostbyname()函数:通过域名获取IP地址

浏览: 151 2019年08月16日
客户端中直接使用 IP 地址会有很大的弊端,一旦 IP 地址变化(IP 地址会经常变动),客户端软件就会出现错误。而使用域名会方便很多,注册后的域名只要每年续费就永远属于自己的,更换 IP 地址时修改域名解析即可,不会影响软件的正常使用。关于域名注册、域名解析、host 文件、DNS 服务器等本...

网络传送数据大小端问题

浏览: 163 2019年08月15日
不同 CPU 中,4 字节整数 1 在内存空间的存储方式是不同的。4 字节整数 1 可用 2 进制表示如下:00000000 00000000 00000000 00000001有些 CPU 以上面的顺序存储到内存,另外一些 CPU 则以倒序存储,如下所示:00000001 00000000 0...

socket实现文件传输

浏览: 102 2019年08月15日
实现的功能为:client 从 server 下载一个文件并保存到本地。编写这个程序需要注意两个问题:1) 文件大小不确定,有可能比缓冲区大很多,调用一次 write()/send() 函数不能完成文件内容的发送。接收数据时也会遇到同样的情况。要解决这个问题,可以使用 while 循环,例如:/...

sockent编程shutdown()函数

浏览: 147 2019年08月13日
调用 close()/closesocket() 函数意味着完全断开连接,即不能发送数据也不能接收数据,这种“生硬”的方式有时候会显得不太“优雅”。上图演示了两台正在进行双向通信的主机。主机A发送完数据后,单方面调用 close()/closesocket() 断开连接,之后主机A、B都不能再接...

TCP协议四次握手断开连接

浏览: 116 2019年08月12日
建立连接非常重要,它是数据正确传输的前提;断开连接同样重要,它让计算机释放不再使用的资源。如果连接不能正常断开,不仅会造成数据传输错误,还会导致套接字不能关闭,持续占用资源,如果并发量高,服务器压力堪忧。建立连接需要三次握手,断开连接需要四次握手,可以形象的比喻为下面的对话:● [Shake 1...

TCP数据的传输过程详解

浏览: 854 2019年08月10日
TCP数据的传输过程上图给出了主机A分2次(分2个数据包)向主机B传递200字节的过程。首先,主机A通过1个数据包发送100个字节的数据,数据包的 Seq 号设置为 1200。主机B为了确认这一点,向主机A发送 ACK 包,并将 Ack 号设置为 1301。为了保证数据准确到达,目标机器在收到数...

TCP数据报结构以及三次握手详解

浏览: 129 2019年08月09日
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接。客户端在收发数据前要使用 connect() 函数和服务器建立连接。建立连接的目的是保证IP地址、端口、物理链路等正确...

TCP协议的粘包问题

浏览: 132 2019年08月09日
上节我们讲到了socket缓冲区和数据的传递过程,可以看到数据的接收和发送是无关的,read()/recv() 函数不管数据发送了多少次,都会尽可能多的接收数据。也就是说,read()/recv() 和 write()/send() 的执行次数可能不同。例如,write()/send() 重复执...

socket缓冲区和阻塞模式

浏览: 133 2019年08月06日
socket缓冲区每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区。write()/send() 并不立即向网络中传输数据,而是先将数据写入缓冲区中,再由TCP协议将数据从缓冲区发送到目标机器。一旦将数据写入到缓冲区,函数就可以成功返回,不管它们有没有到达目标机器,也不管...

socket服务器端持续监听客户端的请求

浏览: 120 2019年08月04日
前面的程序,不管服务器端还是客户端,都有一个问题,就是处理完一个请求立即退出了,没有太大的实际意义。能不能像Web服务器那样一直接受客户端的请求呢?能,使用 while 循环即可。修改前面的回声程序,使服务器端可以不断响应客户端的请求。服务器端 server.cpp:#include <stdi...

socket实现回声客户端

浏览: 123 2019年08月01日
所谓“回声”,是指客户端向服务器发送一条数据,服务器再将数据原样返回给客户端,就像声音一样,遇到障碍物会被“反弹回来”。对!客户端也可以使用 write() / send() 函数向服务器发送数据,服务器也可以使用 read() / recv() 函数接收数据。考虑到大部分初学者使用 Windo...

socket发送数据和接收数据

浏览: 143 2019年07月31日
Linux下数据的接收和发送Linux 不区分套接字文件和普通文件,使用 write() 可以向套接字中写入数据,使用 read() 可以从套接字中读取数据。前面我们说过,两台计算机之间的通信相当于两个套接字之间的通信,在服务器端用 write() 向套接字写入数据,客户端就能收到,然后再使用 ...

基本TCP客户端/服务器程序的套接字函数listen()和accept()函数

浏览: 171 2019年07月30日
基本TCP客户端/服务器程序的套接字函数listen()和accept()函数,让套接字进入监听状态并响应客户端请求,首先咱们看张图对于服务器端程序,使用 bind() 绑定套接字后,还需要使用 listen() 函数让套接字进入被动监听状态,再调用 accept() 函数,就可以随时响应客户端...

基本TCP客户端/服务器程序的套接字函数bind()函数和connect()函数

浏览: 154 2019年07月29日
基本TCP客户端/服务器程序的套接字函数bind()函数和connect()函数,如下图socket() 函数用来创建套接字,确定套接字的各种属性,然后服务器端要用 bind() 函数将套接字与特定的 IP 地址和端口绑定起来,只有这样,流经该 IP 地址和端口的数据才能交给套接字处理。类似地,...

使用socket()函数创建套接字

浏览: 168 2019年07月26日
在Windows下创建socketWindows 下也使用 socket() 函数来创建套接字,原型为:SOCKET socket(int af, int type, int protocol);除了返回值类型不同,其他都是相同的。Windows 不把套接字作为普通文件对待,而是返回 SOCKE...

WSAStartup()函数以及DLL的加载

浏览: 164 2019年07月25日
WinSock(Windows Socket)编程依赖于系统提供的动态链接库(DLL),有两个版本:● 较早的DLL是 wsock32.dll,大小为 28KB,对应的头文件为 winsock1.h;● 最新的DLL是 ws2_32.dll,大小为 69KB,对应的头文件为 winsock2.h...

Windows环境下socket示例

浏览: 137 2019年07月22日
上节演示了 Linux 下的 socket 程序,这节来看一下 Windows 下的 socket 程序。同样,server.cpp 为服务器端代码,client 为客户端代码。服务器端代码 server.cpp:#include <stdio.h>#include <winsock2.h>#p...

linux环境下socket示例

浏览: 158 2019年07月19日
我们从一个简单的“Hello World!”程序切入 socket 编程。本节演示了 Linux 下的代码,server.cpp 是服务器端代码,client.cpp 是客户端代码,要实现的功能是:客户端从服务器读取一个字符串并打印出来。服务器端代码 server.cpp:#include <s...