利用线程使用 ServerSocket 和 Socket 简单双向通讯
来源:互联网 发布:hybrid端口的作用 编辑:程序博客网 时间:2024/06/07 17:31
小项目实现了“电话式”聊天,即任何一方可以任何时候发送消息和接收消息。
下面先看代码,代码后面做讲解。
服务端代码:
import java.net.*;import java.util.Scanner;import java.io.*;public class Server {private ServerSocket serverSocket;Scanner console = new Scanner(System.in);Socket socket;BufferedReader br;public Server(){try { System.out.println("服务器在9999端口监听..."); serverSocket = new ServerSocket(9999); socket = serverSocket.accept(); ServerThread st = new ServerThread(socket); // 利用该Socket建立线程 Thread t = new Thread(st); t.start(); // 启动线程 System.out.println("有客户端成功连接服务器"); // 允许不停的向客户端写消息 String mesToClient; while (true){mesToClient = console.nextLine(); // 从控制台读取要发送的消息PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));pw.println(mesToClient);pw.flush(); }} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main(String[] args) {new Server();}}
服务端线程代码:
import java.net.*;import java.io.*;import java.util.*;/** * 不停的读取来自客户端的消息 * */public class ServerThread extends Thread{private Socket s; // 服务端的socketpublic ServerThread(Socket s){System.out.println("服务端线程已成功启动");this.s = s;}public Socket getS() {return s;}public void setS(Socket s) {this.s = s;}// 不停的读取来自客户端的消息@Overridepublic void run() {// TODO Auto-generated method stubwhile (true){try {BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));System.out.println(br.readLine());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
客户端代码如下:
import java.net.*;import java.io.*;import java.util.*;public class Client {private Socket socket;private BufferedReader br;Scanner console = new Scanner(System.in);public Client(){try {socket = new Socket("127.0.0.1",9999); // 连接本机 9999 端口ClientThread ct = new ClientThread(socket); // 为刚创建的 socket 建立一个线程Thread t = new Thread(ct);t.start(); // 启动线程System.out.println("客户端已成功连接");// 允许不停的向服务器发送消息String mesToServer;while (true){mesToServer = console.nextLine(); // 从控制台读取要想客户端发送的消息PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));pw.println(mesToServer);pw.flush();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main(String[] args) { new Client();}}
客户端线程代码如下:
import java.net.*;import java.io.*;import java.util.*;/** * 不停的读取来自服务端的消息 * */public class ClientThread extends Thread{private Socket s; // 客户端的socketpublic ClientThread(Socket s){System.out.println("客户端线程已成功启动");this.s = s;}public Socket getS() {return s;}public void setS(Socket s) {this.s = s;}// 不停的读取来自客户端的消息@Overridepublic void run() {// TODO Auto-generated method stubwhile (true){try {BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));System.out.println(br.readLine());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
实现思路很简单,即客户端和服务端都需要不停的读取信息和写信息,分开来做。让Client 和 server 两个类不停的写消息,在client 和 server 中的 socket初始化后,把socket作为 clientThread 和 ServerThread的成员,让线程不停的读取消息.
因为 Client 和 ClientThread使用的是同一个Socket,而Server和ServerClient使用的也是同一个Socket,所以我们可以把Client 和 ClientThread看成一个整体,具备不停的读取消息和不停的写消息的功能,只是我们在实现的实现把读和写的功能分开了。Server和ServerClient也是同样的道理,不赘述。
- 利用线程使用 ServerSocket 和 Socket 简单双向通讯
- 利用ServerSocket和ClientSocket实现简单通讯
- socket和serversocket,通讯
- ServerSocket和Socket通讯实例
- android ServerSocket 和 Socket使用简单讲解
- Socket和ServerSocket的使用
- 最简单的实现TCP通信,利用Socket和ServerSocket套接字
- 使用Socket和ServerSocket上传文件
- 安卓Socket和ServerSocket的使用
- Android使用webView和ServerSocket模拟客户端和服务端通讯
- Socket和ServerSocket实例
- socket和serversocket
- socket和serversocket
- socket和serversocket
- socket和serversocket
- socket和serversocket
- socket和serversocket
- Socket和ServerSocket
- Android NDK开发简介
- Future of Test Automation Tools & Infrastructure
- SQL 点滴
- POJ 1922 Ride to School 解题报告
- linux 源代码阅读利器安装:vim+taglist+ctags
- 利用线程使用 ServerSocket 和 Socket 简单双向通讯
- ARM Qt显示JPG图片
- centos彻底删除mysql
- All about Oracle Listener 动态注册 与 静态注册
- 面向对象的设计原则
- Cocos2dx使用 TexturePacker导出的.plist
- 整理字符串
- 关于C++类成员函数的重载、覆盖、隐藏与virtual关键字
- 控制寄存器