利用网络 Socket 和多线程实现一个双向聊天

本贴最后更新于 2783 天前,其中的信息可能已经水流花落

接收键盘输入然后向对方发送消息的线程

package cn.com.chat; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; /** * * @author Xiaofei * */ public class SendMsgThread extends Thread{ /** * 用来接收键盘输入然后向对方发送消息的线程 */ Socket ss = null; BufferedWriter bw = null; BufferedReader br = null; public SendMsgThread(Socket ss){ this.ss = ss; try { bw = new BufferedWriter(new OutputStreamWriter(ss.getOutputStream())); br = new BufferedReader(new InputStreamReader(System.in)); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } public void run(){ try { while(true){ String str; str = br.readLine(); if(str.equals("exit")){ System.exit(0); }else{ bw.write(str+"\n"); bw.flush(); } } } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); }finally{ try { bw.close(); br.close(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } } }

服务端:Server

package cn.com.chat; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) { ServerSocket server = null; Socket socket = null; BufferedReader br= null; try { server = new ServerSocket(88); socket = server.accept(); new SendMsgThread(socket).start(); br = new BufferedReader(new InputStreamReader(socket.getInputStream())); while(true){ String str = br.readLine(); System.out.println("客户端:\n"+str); } } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); }finally{ try { br.close(); server.close(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } } }

客户端:Client

package cn.com.chat; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; public class Client { public static void main(String[] args) { Socket socket = null; BufferedReader br = null; try { socket = new Socket("192.168.16.111", 88); System.out.println("请输入您的消息:"); new SendMsgThread(socket).start(); br = new BufferedReader(new InputStreamReader( socket.getInputStream())); while (true) { String str = br.readLine(); System.out.println("客户端:\n" + str); } } catch (IOException e) { e.printStackTrace(); } finally { try { br.close(); socket.close(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } } }

特别提醒一点:注意启动的顺序,先启动服务端,再启动客户端。现有接收的服务器,客户端才能够获得服务端的端口和 IP。

  • Socket
    20 引用 • 23 回帖
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3192 引用 • 8214 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • someone756 via macOS

    呦,Java 高级.不错.

  • someone

    哈哈,这是以前在学校做的代码,毕业后就没有接触过JAVA 网络这方面的东西了,已经忘记的差不多了。:joy: :joy: :joy: :joy: