博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络编程
阅读量:6720 次
发布时间:2019-06-25

本文共 1961 字,大约阅读时间需要 6 分钟。

  hot3.png

1、什么是TCP协议,什么是UDP协议?

UDP:基于无连接的数据包传输协议;TCP基于连接的数据流传输协议

TCP协议提供了一种可靠的数据传输服务,它是一种面向连接的数据传输协议。在数据传输之前,通信节点之间必须建立起连接。为确保正确地接收数据,TCP协议要求在目标电脑成功收到数据时发回一个确认(即ACK)。如果在某个时限内未收到相应的ACK,将重新传送数据包。如果网络拥塞,这种重新传送将导致发送的数据包重复。但是,接收电脑可使用数据包的序号来确定它是否为重复数据包,并在必要时丢弃它。UDP协议是一种面向无连接的数据传输服务,它不能保证数据包以正确的顺序被接收。该协议不能保证数据准确无误地到达目的地。UDP在许多方面非常有效。当某个程序的目标是尽快地传输尽可能多的信息时(其中任意给定数据的重要性相对较低),可使用UDP协议。QQICQ等聊天软件使用UDP协议发送消息。

1、在java中如何进行socket编程?

Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上的数据的传递。在java中,有专门的socket类来处理用户的请求和响应。利用SOCKET类的方法,就可以实现两台计算机之间的通讯。这里就介绍一下在JAVA中如何利用socket进行网络编程。

在Java中Socket可以理解为客户端或者服务器端的一个特殊的对象,这个对象有两个关键的方法,一个是getInputStream方法,另一个是getOutputStream方法。getInputStream方法可以得到一个输入流,客户端的Socket对象上的getInputStream方法得到的输入流其实就是从服务器端发回的数据流。GetOutputStream方法得到一个输出流,客户端Socket对象上的getOutputStream方法返回的输出流就是将要发送到服务器端的数据流,(其实是一个缓冲区,暂时存储将要发送过去的数据)。

程序可以对这些数据流根据需要进行进一步的封装。本文的例子就对这些数据流进行了一定的封装(关于封装可以参考Java中流的实现部分)。

一、建立服务器类

Java中有一个专门用来建立Socket服务器的类,名叫ServerSocket,可以用服务器需要使用的端口号作为参数来创建服务器对象。   

 
ServerSocket server = new ServerSocket(9998

这条语句创建了一个服务器对象,这个服务器使用9998号端口。当一个客户端程序建立一个Socket连接,所连接的端口号为9998时,服务器对象server便响应这个连接,并且server.accept()方法会创建一个Socket对象。服务器端便可以利用这个Socket对象与客户进行通讯。  

 
Socket incoming = server.accept() 

进而得到输入流和输出流,并进行封装

 
BufferedReader in = new BufferedReader(new InputStreamReader(incoming.getInputStream()));   PrintWriter out = new PrintWriter(incoming.getOutputStream(),true); 

随后,就可以使用in.readLine()方法得到客户端的输入,也可以使用out.println()方法向客户端发送数据。从而可以根据程序的需要对客户端的不同请求进行回应。

在所有通讯结束以后应该关闭这两个数据流,关闭的顺序是先关闭输出流,再关闭输入流,即使用:

 
out.close();   in.close(); 

二、建立客户端代码

相比服务器端,客户端要简单一些,客户端只需用服务器所在机器的ip以及服务器的端口作为参数创建一个Socket对象。得到这个对象后,就可以用"建立服务器"部分介绍的方法实现数据的输入和输出。

 
Socket socket = new Socket("168.160.12.42",9998);   in = new BufferedReader(new InputStreamReader(socket.getInputStream()));   out = new PrintWriter(socket.getOutputStream(),true); 

以上的程序代码建立了一个Socket对象,这个对象连接到ip地址为168.160.12.42的主机上、端口为9998的服务器对象。并且建立了输入流和输出流,分别对应服务器的输出和客户端的写入。

转载于:https://my.oschina.net/wpq/blog/68969

你可能感兴趣的文章
嵌入式系统一些硬件概念
查看>>
neo4j配置文件注意项
查看>>
git 使用精华(1)
查看>>
游戏开发的成功秘诀
查看>>
网络 使用select编写服务器
查看>>
Timeout error occurred trying to start MySQL Daemon 解决办法:
查看>>
不会沟通,金子也未必会发光
查看>>
MongoDB整合Spring
查看>>
WebServices
查看>>
svn代码版本管理
查看>>
Java在mysql中存储emoji表情
查看>>
27、sudo学习笔记
查看>>
22、iptables学习笔记
查看>>
CoreAnimation
查看>>
NTP和DHCP服务器搭建
查看>>
我的友情链接
查看>>
Object-C 块语法
查看>>
我的友情链接
查看>>
spring cloud: Hystrix断路器(熔断器)
查看>>
spring beans源码解读之--bean definiton解析器
查看>>