59、socket的通讯
学习目标:
1、了解Java的历史
2、为什么要学习Java语言
3、端正学习态度
学习过程:
一、socket的通讯
套接字(Socket)表示一个系统的IP地址和端口号的结合,是两台机器间通信的端点,用来处理两个流对象,通讯方式抽象成为流的方式。
通讯的两台计算机,一台担任服务器,一台担任客户机,服务器监听客户机是否连接。java.net.ServerSocket和java.net.Socket两个类用于建立一个双边的通信。ServerSocket类实现服务器,等待来自客户端的连接;Socket连接到一个服务器端,担任客户机。
创建TCP Socket需要的四个信息:
本地系统的IP
本地应用程序使用的TCP端口号
服务器系统的IP
服务器应用程序相应的TCP端口号
1、ServerSocket类
ServerSocket类用于侦听一个客户端的Socket连接,如果没有连接,它将一直等待。ServerSocket构造方法介绍如下:
ServerSocket(int port):用指定的端口port来创建一个侦听Socket,
ServerSocket(int port,int backlog):加上一个用来改变连接队列长度的参数backlog。
ServerSocket(int port,int backlog,InetAddress localAddr):在机器存在多个IP地址的情况下,允许通过localAddr这个参数来指定侦听的IP地址。
常用方法:
Socket accept():等待客户机的连接,并返回对应的Socket。
close():关闭连接。
bind(SocketAddress endpoint):将 ServerSocket 绑定到特定地址(IP 地址和端口号)。
bind(SocketAddress endpoint, int backlog):将 ServerSocket 绑定到特定地址(IP 地址和端口号)。
2、Socket类
Socket类常用构造器:
Socket(String host, int port):创建一个流套接字并将其连接到指定主机上的指定端口号。
Socket常用方法:
getInputStream():返回此套接字的输入流。
getOutputStream():返回此套接字的输出流。
close():关闭此套接字。
getLocalAddress():获取套接字绑定的本地地址。
getLocalPort():返回此套接字绑定到的本地端口。
二、示例代码
1、服务器端代码。新建一个Server类,实现代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
|
该程序运行到accept会停下来,等待客户机的连接,有客户机连接后,程序就会往下运行,先给客户及发送一条信息,然后再获得客户机发送过来的信息。最后关闭所有资源
2、客户端代码。客户机相对比较简单,就是连接服务器,然后接受服务器的信息,并向服务器发送一条信息。大家在运行我们这段代码时,需要把IP地址换成你电脑的IP地址。实现代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
3、测试
如果在MyEclipse的控制台测试不够直观的话,你也可以在Dos控制台中测试。先把这两个文件复制到D:盘中,使用javac命名编译成为字节码。
1、在运行中输入cmd,打开DOS控制台,编译源码。
2、先运行服务类。
3、再次在运行中输入cmd,打开另外一个Dos控制,运行客户机类。
两个控制台之间使用Socket实现了通讯,如果你有两台计算机也可以在两台计算机之间实现通讯。
三、实例
把客户机C:/abc.txt文本通过socket发送给服务机,并保存在服务机的D:盘中。
1、服务器端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|
2、客户端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
你可以在两台电脑之间运行,记得修改客户端的IP地址就可以了。当然你也可以只在本机上面测试,但是现在不同我们之前学习IO时候的简单的复制,而是通过网络传输了。