首页 > 范文大全 > 正文

JAVA TCP/IP Socket 网络通信编程研究

开篇:润墨网以专业的文秘视角,为您筛选了一篇JAVA TCP/IP Socket 网络通信编程研究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:java最初是一种网络编程语言网络通信是Java语言的优势,在程序开发中利用tcp/ip通信协议则能实现C/S模式下的点对点的网络通信。该文主要研究在C/S模式下使用Java socket实现TCP/IP网络程序框架及网络通信的程序实现。

关键词:网络通信;Tcp/IP;Socket

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2013)35-8116-02

1 C/S中TCP/IP与Socket

1.1 TCP/IP协议的优点

每种网络协议都有自己的优点,但是只有TCP/IP允许与Internet完全的连接。TCP/IP是在60年代由麻省理工学院开发的,即便网络遭到了大部分破坏,TCP/IP仍然能够维持有效的通信。在所有的OS中都集成了TCP/IP协议,TCP/IP是实现网际互联的基础,同时TCP/IP协议也具备了可扩展性和可靠性的需求。在现今的网络环境下,能有效地保证点对点信息的传输和安全是网络应用的需要。

1.2 Socket的作用

Socket通常称作"套接字",应用程序通常通过"套接字"向网络发出请求或应答网络请求,Socket是面向C/S模型而设计的,针对客户和服务器程序提供不同的socket系统调用。客户随机申请一个socket (相当于在电话系统中一个想打电话的人可以在任何一台入网电话上拨号呼叫),系统为任何有联网需求及信息需求的客户分配一个socket号;服务器拥有全局socket号 ,客户端socket号相当于电话系统中的各个公共电话,而服务器端相当于总机电话。

1.3 Socket实现网络通信的基本原理

TCP/IP系统中的端口号是一个16位的数字,它的范围是0~65535。客户和服务器必须事先约定所使用的端口。在C/S开发模式中,网络中的各个节点都有独有的IP地址用来表示各节点的身份,服务器预留端口作为链接的接口,而Socket通过在它们之间两两建立链路的方式,来实现网络中点对点的通信。

Socket分为客户端Socket对象及ServerSocket类对象,它们类库位于包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,通过这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过Java语言提供的SocketImpl接口及其方法来完成网络编程所需的网络通信功能。 这套API使Java程序员不用考虑复杂的网络协议以及底层的数据传输方式,而直接用面向对象的思想来实现网络传输。

2 建立C/S基于TCP/IP Socket通信模型

2.1 客户端Socket通信过程

Socket是网络上运行的两个程序间双向通信的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便地编写网络上数据的传递。在Java中,利用Socket类的方法,就可以实现两台计算机之间的通信。客户端Socket通信整个过程主要有4个阶段:(1)请求阶段;(2)建立连接阶段;(3)通信阶段;(4)关闭阶段。

2.2 TCP Socket C/S模型及工作流程

TCP/IP本身是一个工业标准,在C/S模式中,主要通过三次握手,实现通信:

1):主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;

2):主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包;

3):主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功;

图1 C/S程序工作流程图

3 程序实现

3.1 C/S模型下基本程序框架

3.1.1 客户端Socket的实现

客户端通过Socket连接服务器,主要过程经过4个阶段,具体代码如下:

Socket PersonalConnect=new Socket(“服务器IP”,PORT);

……;//socket、bufferedReader及PrintStream对象作为线程成员

PersonalConnect.close();

3.1.2 服务器端ServerSocket的实现

ServerSocket myTcpServer=new ServerSocket(PORT);//设定服务器端口

while(true){//实现多客户链接

Socket c_s=myTcpServer.accept();

……;//socket、bufferedReader及PrintStream对象作为线程成员

c_s.close();}

对于TCP C/S模式中两端的Java类中,主要有三个类成员它们分别是Socket对象、BufferedReader对象、PrintStream对象,而服务器端还有个ServerSocket对象。其中Socket及ServerSocket对象完成连接两端的请求绑定套接的过程,而输入输出流在套接中进行通信。如果一端要表达消息发送结束,则可以关闭其输出流,但并不关闭套接字对象,这就是“半关闭”的作用。

3.2 通过线程管理C/S中的通信

3.2.1 客户端ClientThread的实现

ClientThread.java的主要代码:

public class ClientThread implements Runnable{

……;

public ClientThread(Socket s) throws IOException{

this.personalConnect=s;

……;}

public void run() {……}

}

3.2.2服务器端ServerThread的实现

Tcp_Server.java文件的主要代码:

public static ArrayList socketList = new ArrayList();

//用来保存客户端Socket对象

ServerSocket myTcpServer=new ServerSocket(“服务器端口“);

Socket c_s = myTcpServer.accept();

socketList.add(c_s);//响应客户端Socket请求,并保存Socket对象进入socketList

new Thread(new ServerThread(c_s)).start(); ServerThread.java文件的主要代码:

public class ServerThread implements Runnable

{……;//socket、bufferedReader及PrintStream对象作为线程属性

public ServerThread(Socket s) throws IOException {

this.c_s = s; }}

利用线程在一个List结构中实现多个不同的Socket对象的管理即每一个客户端通过线程实现套接字对象的管理与通信。Accept()方法用于产生”阻塞”,直到接受到一个连接,并且返回一个客户端的Socket对象实例。”阻塞”是一个术语,它使程序运行暂时”停留”在这个地方,直到一个会话产生,然后程序继续。

为了更好地实现对于客户端对象的管理,实现对于其Socket与其消息的管理,我们也可以通过HaspMap对象,来实现单一客户K与其多条消息V的关系映射。实现“Kclient+Vserver“的形式传送消息即“用户名:消息类容”的形式输入,服务器端以HaspMap解析读入的消息对象,辨识消息的发送者与其消息之间的映射关系,实现点对点的消息传输。

4 结束语

本文主要介绍的内容仅适合于TCP/IP网络协议。Java Socket 可以实现TCP协议在两台计算机之间建立可靠连接。连接安全可靠,数据不会丢失,Java平台还提供了更安全的SSLSocket类,SSLSocket通信是对SOCKET通信的拓展。在Socket基础上添加了一层安全性保护,提供了更高的安全性,包括身份验证、数据加密以及完整性验证。其中身份验证用于数字证书的发放和应用。数据加密可以通过密钥防止消息传递过程中被别人监听而造成的损失。所以Socket编程在网络通信中得到了广泛的应用。

参考文献:

[1] Cay S.Horstman,Gray Cornell. Java2 核心技术[M].北京:机械工业出版社, 2006.

[2] Bruce Eckel.Java 编程思想[M].北京:机械工业出版社,2007.