实用文档>socket技术要点总结

socket技术要点总结

时间:2022-06-06 10:36:40

socket技术要点总结

socket技术要点总结

socket技术要点总结

  篇一:socket技术总结

  Socket技术要点总结

  1、什么是TCP/IP、UDP,它的结构是什么?

  1.1 TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。 TCP 是传输控制协议,是一个面向连接的协议,为用户进程提供可靠的全双工字节流。TCP 套接字是一种流套接字(stream socket).TCP关心确认,超时和重传之类的细节。大多数网络应用程序都在使用TCP。

  注意:TCp既可以使用IPv4,也可以使用IPv6.

  1.2UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是属于TCP/IP协议族中的一种。

  UDP是一个无连接协议,UDP套接字是一种数据报套接字(datagram socket)。UDP数据报不能保证最终到达它们的目的地。和TCP一样,UDP既可以使用IPv4,也可以使用ipv6.

  1.3 TCP和UDP的区别?可靠性

  在TCP/IP协议中,TCP协议通过三次握手建立一个可靠的连接(像打电话) 第一次握手:客户端尝试连接服务器,向服务器发送syn包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入SYN_SEND状态等待服务器确认

  第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态

  第三次握手:第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手

  定睛一看,服务器socket与客户端socket建立连接的部分其实就是大名鼎鼎的三次握手

  而UDP是不可靠的连接,像是写信,对方不一定能够收到信的内容;

  1.4 TCP/IP、UDP的分层:

  由上可以看到TCP/IP协议族包括应用层、运输层、网络层、链路层。

  2.socket

  2.1 套接字(socket)概念 套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。

  应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

  2.2 建立socket连接

  建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket,另一个运行于服务器端,称为ServerSocket。

  套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。 服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

  客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

  连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

  服务端: ServerSocket serverSocket = new ServerSocket(PORT);

  Socket client = serverSocket.accept();

  客户端:Socketsocket = new Socket(IP_ADDR, PORT);

  socket.getInputStream()、socket.getInputStream()获取到流传递数据信息; 补充:

  HTTP连接

  HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。 HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

  1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。

  2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。

  由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的做法是即使不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器

  篇二:Socket初步总结文档

  Socket

  说明

  所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句

  柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

  以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中。

  ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。

  重要的Socket API:

  java.net.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下

  面介绍使用最频繁的三个方法,其它方法大家可以见JDK-1.3文档。

  . Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的

  Socket对象实例。"阻塞"是一个术语,它使程序运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。

  . getInputStream方法获得网络连接输入,同时返回一个InputStream对象实例

  . getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。

  注意:其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。

  通信方式

  主要有以下三大类:

  (一)SERVER/CLIENT方式

  1.一个Client方连接一个Server方,或称点对点(peer to peer)=892

  2 .多个Client方连接一个Server方,这也是通常的并发服务器方式。

  3.一个Client方连接多个Server方,这种方式很少见,主要用于一个客户向多个服务 器发送请求情况。

  (二)连接方式

  1.长连接

  Client方与Server方先建立通讯连接,连接建立后不断开,然后再进行报文发送和接收。这种方式下由于通讯连接一直存在,可以用下面命令查看连接是否建立:

  netstat –f inet|grep 端口号(如5678)。此种方式常用于点对点通讯。

  2.短连接

  Client方与Server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此种方式常用于一点对多点通讯,比如多个Client连接一个Server.

  (三)发送接收方式

  1.异步

  报文发送和接收是分开的,相互独立的,互不影响。这种方式又分两种情况:

  (1)异步双工:接收和发送在同一个程序中,有两个不同的子进程分别负责发送和接收

  (2)异步单工:接收和发送是用两个不同的程序来完成。

  2.同步

  报文发送和接收是同步进行,既报文发送后等待接收返回报文。同步方式一般需要考虑超时问题,即报文发上去后不能无限等待,需要设定超时时间,超过该时间发送方不再等待读返回报文,直接通知超时返回。

  实际通信方式是这三类通信方式的组合。比如一般书上提供的TCP/IP范例程序大都是同步短连接的SERVER/CLIENT程序。有的组合是基本不用的,比较常用的有价值的组合是以下几种:

  同步短连接Server/Client

  同步长连接Server/Client

  异步短连接Server/Client

  异步长连接双工Server/Client

  异步长连接单工Server/Client

  其中异步长连接双工是最为复杂的一种通信方式,有时候经常会出现在不同银行或不同城市之间的两套系统之间的通信。比如金卡工程。由于这几种通信方式比较固定,所以可以预先编制这几种通信方式的模板程序。

  报文格式

  通信报文格式多样性更多,相应地就必须设计对应的读写报文的接收和发送报文函数。

  (一)阻塞与非阻塞方式

  1.非阻塞方式

  读函数不停地进行读动作,如果没有报文接收到,等待一段时间后超时返回,这种情况一般需要指定超时时间。

  2.阻塞方式

  如果没有报文接收到,则读函数一直处于等待状态,直到有报文到达。

  (二)循环读写方式

  1.一次直接读写报文

  在一次接收或发送报文动作中一次性不加分别地全部读取或全部发送报文字节。

  2.不指定长度循环读写

  这一般发生在短连接进程中,受网络路由等限制,一次较长的报文可能在网络传输过程中被分解成了好几个包。一次读取可能不能全部读完一次报文,这就需要循环读报文,直到读完为止。

  3.带长度报文头循环读写

  这种情况一般是在长连接进程中,由于在长连接中没有条件能够判断循环读写什么时候结束,所以必须要加长度报文头。读函数先是读取报文头的长度,再根据这个长度去读报文.实际情况中,报头的码制格式还经常不一样,如果是非ASCII码的报文头,还必须 转换成ASCII,常见的报文头码制有:

  (1)n个字节的ASCII码

  (2)n个字节的BCD码

  (3)n个字节的网络整型码

  Socket通信模型

  ServerSocket类例子

  int PORT = 8888; // 侦听端口

  // 创建ServerSocket

  ServerSocket serverSocket = new ServerSocket(PORT);// 开始循环

  while (true) {

  // 等待连接

  Socket socket = serverSocket.accept();

  // 处理链接的线程类

  ServerThread st = new ServerThread(socket);

  // 启动线程处理

  new Thread(st).start();

  }

  客户端的例子

  int PORT = 8888; // 侦听端口

  // 建立连接

  socket = new Socket(“127.0.0.1”, 8888);

  // 输入数据的读取

  BufferedReader

  netIn=newBufferedReader(new

  InputStreamReader(socket.getInputStream()));

  // 写入数据

  PrintWriter netOut = new PrintWriter(socket.getOutputStream());

  篇三:socket编程实验心得体会

  实验心得体会

  在本次实验中,我通过对网络课上所学知识的应用,学到了很多实践中的知识。并且加深了我对课本知识的理解和认识,在实验过程中,更容易记忆和深入理解各种协议的工作以及在网络编程中应该注意的一系列问题。

  我们的第一个实验是对ARP、ICMP、FTP和HTTP协议的分析和验证。在利用软件Etherpeek抓取在主机通信中的报文,得到了很多的关于这些协议的具体参数。在课程学习过程中,书本和老师给我的感觉就是太枯燥,通过课本的学习根本没有办法理解各种协议的工作细节。有很多的细微之处是想不通的。但是,在本次实验中,我就通过各种报文的分析,看到了网络中不同层次协议之间的协做过程。对应不同层之间就是通过协议来使用,我对整个网路的大体架构有了一个统筹的了解,虽然对很多的更深入的知识不是很了解,但是比我在课上学的东西要更有趣,而且容易学习,更能够我学习的兴趣。 第二个实验是Socket编程实验。在编写网络程序之前,我对网路通信可以说一无所知,根本不知道那些网路上的程序是怎么通过网路进行通信的。在本次实验中,终于揭开了他们神秘的面纱。当然在实验中出现了很多的插曲,我是在Linux环境下编写的程序,很多技术方面的问题都无法解决。查阅书籍和网上咨询才弄懂了他们的来龙去脉,最终是将我的程序编写完了。开始接触网路编程时,那是一头雾水,根本不知从何下手。在看了辅导教员给我们程序之后才有了很多的起色,才能够自己编写程序。在网络编程中,我最深的体会就是对具体的内部细节不熟悉,导致在调试的过程中感觉到很无力。在很多函数的作用下,经常就是一团乱麻。之后,我每次编写之前就是将用到的函数的用法温习一下,最后还是能够解决很多的问题的。

  本次试验是我们学习网路的第一次。以前的课程从来没有接触到网路方面的知识。这次的新知识对我们的挑战还算不是太大,通过我们的努力,所有的困难时被克服掉了。其实,实验应该是我们的重点,在以后的工作中要的就是我们的实际的动手能力,如果我们在学习期间就是只学了书本上的知识,那样对理论的了解是不够深刻的,只有通过实验才能激发我们的学习兴趣。总之,我觉得实验才是检验理论的唯一标准。

【socket技术要点总结】相关文章:

冬天养牛技术要点总结07-25

青虾养殖技术要点02-21

总结概论要点07-05

冬季健身的要点总结07-08

民政救灾总结与救灾要点07-26

近期信息报送要点总结07-23

英语听写注意要点总结06-20

简要阐述总结的写作要点07-05

熔化和凝固物理要点总结10-13

红尾伯劳的饲养要点总结07-08

用户协议