JAVA Socket 编程学习
2017-09-28 20:59
302 查看
简介:
下面是我在慕课上听完JAVA Socket课程后的学习总结,需要的小伙伴可以看下。
工具:IntelliJ IDEA
1. Socket 通信
Java Socket 实现客户端--服务器间的双向实时通信。java.net包中定义的两个类socket和ServerSocket,分别用来实现双向连接的client和server端。
![](https://img-blog.csdn.net/20170928205948941?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGFucGFuOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2. Socket 通信实现方法
2.1 服务器端(非多线程)
① 创建ServerSocket对象,绑定监听端口
② 通过accept()方法监听客户端请求
③ 连接建立后,通过输入流读取客户端发送的请求信息
④ 通过输出流向客户端发送相应信息
⑤ 关闭相关资源
代码实现类:
2.2 客户端
① 创建Socket对象,指明需要连接的服务器的地址和端口号
② 连接建立后,通过输出流想服务器端发送请求信息
③ 通过输入流获取服务器响应的信息
④ 关闭响应资源
代码实现类:
3.应用多线程实现服务器与多客户端之间的通信
3.1新建服务器端线程处理类
3.2 服务器端 (多线程)
①服务器端创建ServerSocket,循环调用accept()等待客户端连接
②客户端创建一个socket并请求和服务器端连接
③服务器端接受客户端请求,创建socket与该客户建立专线连接
④ 建立连接的两个socket在一个单独的线程上对话
⑤ 服务器端继续等待新的连接
代码实现类:
下面是我在慕课上听完JAVA Socket课程后的学习总结,需要的小伙伴可以看下。
工具:IntelliJ IDEA
1. Socket 通信
Java Socket 实现客户端--服务器间的双向实时通信。java.net包中定义的两个类socket和ServerSocket,分别用来实现双向连接的client和server端。
2. Socket 通信实现方法
2.1 服务器端(非多线程)
① 创建ServerSocket对象,绑定监听端口
② 通过accept()方法监听客户端请求
③ 连接建立后,通过输入流读取客户端发送的请求信息
④ 通过输出流向客户端发送相应信息
⑤ 关闭相关资源
代码实现类:
import java.io.*; import java.net.ServerSocket; import java.net.Socket; /** * 基于TCP 协议的Socket通信,实现用户登录 * 服务器端 * Created by Administrator on 2017/9/28. */ public class TestServerSocket { public static void main(String[] args) { ServerSocket serverSocket= null; Socket socket=null; try { //1、创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口 serverSocket = new ServerSocket(8888); System.out.println("***服务器即将启动,等待客户端的连接"); //2、调用accept()方法开始监听,等待客户端的连接 socket=serverSocket.accept(); //3、获取输入流,并读取客户端信息 InputStream inputStream=socket.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(inputStream,"utf-8")); String data=null; while((data=br.readLine())!=null) { System.out.println("我是服务器,客户端说:"+data); } socket.shutdownInput();//关闭输入流 //4、获取输出流,响应客户端的请求 OutputStream os=socket.getOutputStream(); PrintWriter pw=new PrintWriter(os); pw.write("欢迎你!"); pw.flush(); //关闭资源 pw.close(); os.close(); br.close(); inputStream.close(); socket.close(); serverSocket.close(); } catch (IOException e) { 4000 e.printStackTrace(); } } }
2.2 客户端
① 创建Socket对象,指明需要连接的服务器的地址和端口号
② 连接建立后,通过输出流想服务器端发送请求信息
③ 通过输入流获取服务器响应的信息
④ 关闭响应资源
代码实现类:
import java.io.*; import java.net.Socket; /** * 客户端 * Created by Administrator on 2017/9/28. */ public class TestSocket { public static void main(String[] args) { try { //1、创建客户端Socket,指定服务器地址和端口 Socket socket=new Socket("localhost",8888); //2、获取输出流,向服务器端发送信息 OutputStream outputStream=socket.getOutputStream(); PrintWriter pw=new PrintWriter(outputStream); pw.write("用户名:admin;密码:123"); pw.flush(); socket.shutdownInput(); //3、获取输入流,并读取服务器端的响应信息 InputStream inputStream=socket.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(inputStream,"utf-8")); String data=null; while((data=br.readLine())!=null) { System.out.println("我是客户端,服务器说:"+data); } //关闭资源 br.close(); inputStream.close(); pw.close(); outputStream.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
3.应用多线程实现服务器与多客户端之间的通信
3.1新建服务器端线程处理类
import java.io.*; import java.net.Socket; /** * 服务器端线程处理类 * Created by Administrator on 2017/9/28. */ public class ServerThread extends Thread { //和本线程相关的socket Socket socket = null; public ServerThread(Socket socket) { this.socket = socket; } public void run() { //服务器处理代码 //3、获取输入流,并读取客户端信息 InputStream inputStream = null; BufferedReader br = null; OutputStream os = null; PrintWriter pw = null; try { inputStream = socket.getInputStream(); br = new BufferedReader(new InputStreamReader(inputStream, "utf-8")); String data = null; while ((data = br.readLine()) != null) { System.out.println("我是服务器,客户端说:" + data); } socket.shutdownInput();//关闭输入流 //4、获取输出流,响应客户端的请求 os = socket.getOutputStream(); pw = new PrintWriter(os); pw.write("欢迎你!"); pw.flush(); } catch (IOException e) { e.printStackTrace(); } finally { //关闭资源 try { if (pw != null) { pw.close(); } if (os != null) { os.close(); } if (br != null) { br.close(); } inputStream.close(); } catch (IOException e) { e.printStackTrace(); } try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } }
3.2 服务器端 (多线程)
①服务器端创建ServerSocket,循环调用accept()等待客户端连接
②客户端创建一个socket并请求和服务器端连接
③服务器端接受客户端请求,创建socket与该客户建立专线连接
④ 建立连接的两个socket在一个单独的线程上对话
⑤ 服务器端继续等待新的连接
代码实现类:
import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; /** * 服务器端(多线程) * Created by Administrator on 2017/9/28. */ public class ThreadServerSocket { public static void main(String[] args) { try { //1、创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口 ServerSocket serverSocket = new ServerSocket(8888); Socket socket = null; //记录客户端的数量 int count = 0; System.out.println("***服务器即将启动,等待客户端的连接"); //循环监听等待客户端的连接 while (true) { //调用accept()方法开始监听,等待客户端的连接 socket = serverSocket.accept(); //创建一个新的线程 ServerThread serverThread = new ServerThread(socket); //启动线程 serverThread.start(); count++; System.out.println("客户端连接的数量:" + count); //获取当前客户端的IP地址 InetAddress address=socket.getInetAddress(); System.out.println("当前客户端的IP:"+address.getHostAddress()); } } catch (IOException e) { e.printStackTrace(); } } }
相关文章推荐
- Java网络通信学习(一)- Java Socket 编程
- Java Socket编程简捷学习过程
- Netty学习之二--Java socket编程(UDP实例)
- JAVA Socket 编程学习笔记(一)
- Java Socket 编程学习(1)
- Java Socket 编程学习(4)
- java socket 编程学习资料收集2
- JAVA Socket 编程学习笔记(一)
- Java Socket 编程实例学习
- java socket 编程学习笔记
- Java Socket编程简捷学习过程
- JAVA Socket 编程学习笔记(一)
- java socket 编程学习资料收集
- Java Socket 编程学习(2)
- JAVA Socket 编程学习笔记(二)
- Java Socket 编程学习之 TCP
- Java Socket编程简捷学习过程
- 免费学习编程的10个好工具(2)
- Python socket编程学习
- Java Socket编程详细解说