服务器编程

专题五:TCP编程

 ̄綄美尐妖づ 提交于 2020-02-22 03:29:12
前言   前面专题的例子都是基于应用层上的HTTP协议的介绍, 现在本专题来介绍下传输层协议——TCP协议,主要介绍下TCP协议的工作过程和基于TCP协议的一个简单的通信程序,下面就开始本专题的正文了。   一、TCP的工作过程   首先TCP是一种面向连接的,可靠的,基于字节流的传输层通信协议。TCP的工作过程可以分为三个阶段:一、连接的建立; 二、传输数据; 三、断开连接,下面就对这三个过程分别介绍下: 1.1 连接的建立   TCP的连接建立就像打电话一样, 我们打电话时,拨一个号码的号码并不是立即就可以接通的,期间会有一个“嘟 嘟”的呼叫过程, 这就好比是TCP协议的连接的建立阶段。当我们用TCP编写的程序,必须先建立TCP连接。TCP协议的连接建立通过三次握手来完成的,下面是在网上找的一张TCP三次握手的图片:              下面就对这三次握手简单的介绍: 第一次握手:建立连接时,客户端发送SYN包(seq=x)到服务器,并进入SYN_Send状态,等待服务器确认 第二次握手:服务器收到SYN包,必须确认客户的SYN(ACK=x+1),同时自己也发送一个SYN包(SEQ=y),即SYN+ACK包,此时服务器进入SYN_Recv状态 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ACK=y+1),此包发送完毕

win32下的socket编程

被刻印的时光 ゝ 提交于 2020-02-12 07:21:51
// socket.cpp : 定义控制台应用程序的入口点。 // //服务器端 //SOCKET连接过程   //根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。    //服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。   //客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。 //为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。    //连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。 //而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。 //如何开发一个Server-Client模型的程序 //开发原理:    //服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。   // 客户端

精心整理「服务器Linux C/C++」 成长路程(附思维导图)

喜你入骨 提交于 2020-02-10 20:39:50
前言 我不是名校毕业,更没有大厂的背景,我只是一个毕业不到 2 年的普普通通的程序员,在摸爬滚打的工作这段时间里,深知了有一个「完整的知识体系」是非常重要的。当事人非常后悔没有在大学期间知道这个道理…… 众多大厂招人的需求也是非常注重此方面,毕竟我们不能单单只是一个只会写代码的程序员,更应该成为一个全面的工程师,能够迅速解决工作上的需求及众多问题。 特此,我根据众多大佬的书籍推荐和豆瓣的高分书籍总结了一份较为全面的「服务器Linux C/C++」 成长路程,我自己也是在跟着这份思维导图进一步的学习,希望这份路程也能伴随大家的成长。 特此说明下: 所有书籍资料和高清思维导图的获取的方式见文章末尾(机智的你,应该发现图就有途径) 思维导图中的极客时间专栏,是我自己订阅的专栏,不是打广告,对此部分不感兴趣的小伙伴可以略过…… C 编程语言 入门: 《啊哈C语言》 《啊哈C语言!逻辑的挑战(修订版)》是一本非常有趣的编程启蒙书,书内容从中小学生的角度来讲述,没有生涩的内容,取而代之的是生动活泼的漫画和风趣幽默的文字。你可以在茶余饭后阅读,甚至坐在马桶上也可以看得津津有味。 进阶: 《C和指针》 本书提供与C语言编程相关的全面资源和深入讨论。本书通过对指针的基础知识和高级特性的探讨,帮助程序员把指针的强大功能融入到自己的程序中去。 《C专家编程》 本书展示了最优秀的C程序员所使用的编码技巧

精心整理「服务器Linux C/C++」 成长路程(附思维导图)

允我心安 提交于 2020-02-09 22:42:00
前言 我不是名校毕业,更没有大厂的背景,我只是一个毕业不到 2 年的普普通通的程序员,在摸爬滚打的工作这段时间里,深知了有一个「完整的知识体系」是非常重要的。当事人非常后悔没有在大学期间知道这个道理…… 众多大厂招人的需求也是非常注重此方面,毕竟我们不能单单只是一个只会写代码的程序员,更应该成为一个全面的工程师,能够迅速解决工作上的需求及众多问题。 特此,我根据众多大佬的书籍推荐和豆瓣的高分书籍总结了一份较为全面的「服务器Linux C/C++」 成长路程,我自己也是在跟着这份思维导图进一步的学习,希望这份路程也能伴随大家的成长。 特此说明下: 所有书籍资料和高清思维导图的获取的方式见文章末尾(机智的你,应该发现图就有途径) 思维导图中的极客时间专栏,是我自己订阅的专栏,不是打广告,对此部分不感兴趣的小伙伴可以略过…… C 编程语言 入门: 《啊哈C语言》 《啊哈C语言!逻辑的挑战(修订版)》是一本非常有趣的编程启蒙书,书内容从中小学生的角度来讲述,没有生涩的内容,取而代之的是生动活泼的漫画和风趣幽默的文字。你可以在茶余饭后阅读,甚至坐在马桶上也可以看得津津有味。 进阶: 《C和指针》 本书提供与C语言编程相关的全面资源和深入讨论。本书通过对指针的基础知识和高级特性的探讨,帮助程序员把指针的强大功能融入到自己的程序中去。 《C专家编程》 本书展示了最优秀的C程序员所使用的编码技巧

网络编程并发编程面试题

泄露秘密 提交于 2020-02-07 23:47:48
网络编程,并发编程 面试题1. 简述 OSI 七层协议。应用层与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的。例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心OSI的第7层。但是,如果添加了一个传输文件的选项,那么字处理器的程序员就需要实现OSI的第7层。示例:TELNET,HTTP,FTP,NFS,SMTP等。表示层这一层的主要功能是定义数据格式及加密。例如,FTP允许你选择以二进制或ASCII格式传输。如果选择二进制,那么发送方和接收方不改变文件的内容。如果选择ASCII格式,发送方将把文本从发送方的字符集转换成标准的ASCII后发送数据。在接收方将标准的ASCII转换成接收方计算机的字符集。示例:加密,ASCII等。会话层它定义了如何开始、控制和结束一个会话,包括对多个双向消息的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的,在某些情况下,如果表示层收到了所有的数据,则用数据代表表示层。示例:RPC,SQL等。传输层这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。示例:TCP,UDP,SPX。网络层这层对端到端的包传输进行定义,它定义了能够标识所有结点的逻辑地址

Python CGI编程

瘦欲@ 提交于 2020-02-04 03:23:54
CGI 目前由 NCSA 维护,NCSA 定义 CGI 如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP 服务器,提供同客户端 HTML 页面的接口。 为了更好的了解 CGI 是如何工作的,我们可以从在网页上点击一个链接或 URL 的流程: 1、使用你的浏览器访问 URL 并连接到 HTTP web 服务器。 2、Web 服务器接收到请求信息后会解析 URL,并查找访问的文件在服务器上是否存在,如果存在返回文件的内容,否则返回错误信息。 3、浏览器从服务器上接收信息,并显示接收的文件或者错误信息。 CGI 程序可以是 Python 脚本,PERL 脚本,SHELL 脚本,C 或者 C++ 程序等 来源: CSDN 作者: 披风秃头侠 链接: https://blog.csdn.net/qq_41371349/article/details/104161714

最基本的Socket编程

六月ゝ 毕业季﹏ 提交于 2020-01-26 13:36:03
示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息;这里只是一个简单的示例,是一个最基本的socket编程流程,在接下来的文章中,会依次记录套接字的同步和异步,以及它们的区别。 下面是示例程序的简单步骤说明 服务器端: 第一步:用指定的端口号和服务器的ip建立一个EndPoint对像; 第二步:建立一个Socket对像; 第三步:用socket对像的Bind()方法绑定EndPoint; 第四步:用socket对像的Listen()方法开始监听; 第五步:接受到客户端的连接,用socket对像的Accept()方法创建新的socket对像用于和请求的客户端进行通信; 第六步:通信结束后一定记得关闭socket; 代码: using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; namespace server { class Program { static void Main(string[] args) { int port = 2000; string host = "127.0.0.1"; /**////创建终结点(EndPoint) IPAddress ip =

Java Scoket编程

时光毁灭记忆、已成空白 提交于 2020-01-25 10:23:13
Java Scoket编程 转自http://www.cnblogs.com/futao123/p/5068632.html 爱海滔滔 一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。 而TCP层则提供面向应用的可靠(tcp)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。 目前较为流行的网络编程模型是客户机/服务器(C/S)结构。 即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提 出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客 户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也 能及时得到服务。 二,两类传输协议: TCP 和 UDP   TCP 是 Tranfer Control Protocol 的 简 称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须 建 立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时

网络编程——TCP和UDP编程模型(TCP/UDP服务器和客户端-实现代码)

天大地大妈咪最大 提交于 2020-01-23 00:37:14
网络编程及其编程环境 : 通信连接: 局域网拓扑图: 广域网拓扑图: 编程环境:vim,linux,..... TCP和UDP编程模型 1,传输层TCP和UDP 1)OSI七层模型 2)TCP协议 :传输控制协议,向用户进程提供可靠的全双工字节流 3)UDP协议:用户数据报协议,是一种无连接的协议,不可靠传输 2,TCP编程模型 1)客户端 2)服务器 例子1:socket()实现进程间通信,AF_UNIX (1)服务器端;server.c #include<stdlib.h> #include<stdio.h> #include<unistd.h> #include<sys/types.h> #include<sys/socket.h> #include<sys/un.h> int main() { int serverfd,clientfd; struct sockaddr_un server,client; int client_len=sizeof(client); //initial server.sun_family = AF_UNIX; strcpy(server.sun_path,"mysocketunix"); //socket serverfd=socket(AF_UNIX,SOCK_STREAM,0); if(serverfd ==-1) { printf(

Linux学习之socket编程(一)

家住魔仙堡 提交于 2020-01-15 00:13:43
socket编程 socket的概念:     在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”就称为socket。   在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接。socket本身有“插座”的意思,因此用来描述网络连 接的一对一关系。   TCP/IP协议最早在BSD UNIX上实现,为TCP/IP协议设计的应用层编程接口称为socketAPI。   本章的主要内容是socket API,主要介绍TCP协议的函数接口,最后介绍UDP协议和UNIXDomain Socket的函数接口。 socket socket-api 1.基础知识 网络字节序     我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分,磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分。网络数据流同样有大端小端之分,那么如何定义网络数据流的地址呢?发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出,接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存,因此,网络数据流的地址应这样规定:先发出的数据是低地址,后发出的数据是高地址。   TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节