您的位置:首页 > 理论基础 > 计算机网络

JavaSE入门学习48:Socket网络通信编程(二)

2016-06-07 16:13 731 查看

三Socket通信

(1)Socket

套接字Socket是网络通信的基础,简单来说,可以认为是IP地址+端口,用来区分实现不同应用程序的通信。

两个Java应用程序可通过一个双向的网络通信连接实现数据交换,这个双向链路的一段称为一个Socket。Socket

通常用来实现client-server连接。

java.net包中定义的两个类Socket和ServerSocket,分别用来实现双向连接的client和server。

(2)Socket通信模型



Socket通信:



Socket通信实现步骤:

1)创建ServerSocket和Socket。

2)打开连接到Socket的输入/输出流。

3)按照协议对Socket进行读/写操作。

4)关闭输入输出流,关闭Socket。

(3)ServerSocket类

ServerSocket类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可

能向请求者返回结果。

ServerSocket类的构造方法:



ServerSocket类的方法:





(4)Socket类

Socket类实现客户端套接字(也可以就叫"套接字")。套接字是两台机器间通信的端。

Socket类的构造方法:



Socket类的方法:







四通过Socket实现TCP编程

(1)TCP

TCP协议是面向连接,可靠的,有序的,以字节流的方式发送数据。

基于TCP协议实现网络通信的类:

1)客户端的Socket类

2)服务器端的SoServercket类

(2)基于TCP的Socket通信具体步骤:

服务器端:

1)创建ServerSocket对象,绑定监听端口。

2)通过accept()方法监听客户端请求。

3)连接建立后,通过输入流读取客户端发送的请求信息。

4)通过输出流向客户端发送响应消息。

5)关闭相关资源。

客户端:

1)创建Socket对象,指明需要连接的服务器的地址和端口号。

2)连接建立后,通过输出流向服务器端发送请求信息。

3)通过输入流获取服务器响应的消息。

(3)实例

一对一(一个服务器和一个客户端)TCP编程实例代码:

Server.java源文件代码:

<span style="font-size:18px;">import java.net.*;
import java.io.*;

/*
*基于TCP协议的Socket通信,实现用户登录
*服务器端
*/
public class Server{
public static void main(String[] args){
try{
//1创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听端口
ServerSocket serverSocket = new ServerSocket(8111);
//2调用accept()方法开始监听,等待客户端的连接
System.out.println("***服务器即将启动,等待客户端的连接***");
Socket socket = serverSocket.accept();
//3获取输入流,并读取客户端信息
//字节输入流
InputStream is = socket.getInputStream();
//将字节输入流转换为字符输入流
InputStreamReader isr = new InputStreamReader(is,"utf-8");
//为字符输入流添加缓冲
BufferedReader br = new BufferedReader(isr);
//读取数据
String info = null;
//循环读取客户端的信息
while((info=br.readLine())!=null){
System.out.println("我是服务器,客户端说:"+info);
}
//关闭输入流
socket.shutdownInput();
//4获取输出流,响应客户端的请求
OutputStream os=socket.getOutputStream();
//包装为打印流
PrintWriter pw=new PrintWriter(os);
pw.write("欢迎您!");
//刷新缓存
pw.flush();

//5关闭资源
pw.close();
os.close();
br.close();
isr.close();
is.close();
socket.close();
serverSocket.close();
}catch(IOException e){
e.printStackTrace();
}

}
}</span>


Client.java源文件代码:

<span style="font-size:18px;">import java.net.*;
import java.io.*;

/*
*基于TCP协议的Socket通信,实现用户登录
*客户端
*/
public class Client{
public static void main(String[] args){
try{
//1创建客户端Socket,指定服务器地址和端口
Socket socket = new Socket("localhost",8111);
//2获取输出流,向服务器端发送信息
//字节输出流
OutputStream os = socket.getOutputStream();
//将输出流包装为打印流
PrintWriter pw = new PrintWriter(os);
pw.write("用户名:admin;密码:123");
pw.flush();
//关闭输出流
socket.shutdownOutput();
//获取输入流,并读取服务器端的响应信息
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String info=null;
//循环读取服务器端的信息
while((info=br.readLine())!=null){
System.out.println("我是客户端,服务器端说:"+info);
}

//4关闭资源
br.close();
is.close();
pw.close();
os.close();
socket.close();
}catch(MalformedURLException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
}</span>


运行结果:

服务器端结果:



客户端结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: