怎么用java socket实现局域网聊天

本文主要介绍"怎么用java socket实现局域网聊天" 有关的知识,希望能够解决您遇到有关问题,下面我们一起来看看这篇 "怎么用java socket实现局域网聊天" 文章。

代码很简单分为两个类,一个服务器类,一个客户端,运行时分别启动两个线程一个负责接受另一个负责发送。

整体流程是 两台机器分别启动程序,一个选择主动连接 另一个选择被动接受,即可实现类似qq的聊天效果两个人可以同时发送消息。

注意的事,不要在同一台电脑上同时启动两个,这样会服务端和客户端的ip都是相同很有可能造成自己发送的消息自己接受到了,可以两台电脑或者虚拟机里面进行。

服务端:

package com.server;   import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket;   import com.client.RunClient;   public class RunServer {     public static Socket socket=null;     /**      * 建立服务器被动连接      * @throws IOException      */     public void startServer() throws IOException {         //服务器接收数据         ServerSocket serverSocekt=new ServerSocket(8888);         System.out.println("服务器启动,等待连接...");         //创建客户端线程         RunClient rc=new RunClient();         Thread rct=new Thread(rc);         rct.start();                           //阻塞线程 监听端口建立socket会话         RunServer.socket=serverSocekt.accept();                           //获取输入留         InputStream is=socket.getInputStream();         //将字节输入流转换成字符输入流         InputStreamReader isr=new InputStreamReader(is);         //将字符输入流装入带缓冲的输入流中         BufferedReader br=new BufferedReader(isr);                  String str=null;         while((str=br.readLine())!=null){             System.out.print("输出信息:"+str);         }         socket.shutdownInput();         serverSocekt.close();     } }

客户端:

package com.client;   import java.io.BufferedWriter; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner;   import com.server.RunServer;   public class RunClient implements Runnable {          @Override     public void run() {         // TODO Auto-generated method stub         Scanner input = new Scanner(System.in);         System.out.println("1、主动连接\n2、被动等待");         String sign=input.next();         switch (sign) {         case "1":             try {                 System.out.println("输入服务器IP:");                 startClient(input.next());             } catch (Exception e) {                 e.printStackTrace();             }             break;         case "2":             try {                 startClient();             } catch (Exception e) {                 e.printStackTrace();             }             break;                      default:             break;         }     }               /**      * 由已经建立的socket 进行连接反向连      * @throws Exception       * @throws UnknownHostException       */     public void startClient() throws Exception{                  while(true){             try {                 if(RunServer.socket!=null){                     break;                 }                 Thread.sleep(1000);             } catch (InterruptedException e) {                 e.printStackTrace();             }         }                           // 与服务器建立连接         Socket socket=new Socket(RunServer.socket.getInetAddress().getHostAddress(), 8888);         System.out.println("连接建立成功...");                  //向服务器写入流         OutputStream os=socket.getOutputStream();         BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os));         Scanner input=new Scanner(System.in);                  while(true){             System.out.println("输入信息:");             bw.write(input.next());             bw.newLine();             bw.flush();         }     }          /**      * 通过IP与服务器建立连接      * @throws Exception       * @throws UnknownHostException       */     public void startClient(String ip) throws Exception{         // 与服务器建立连接         Socket socket=new Socket(ip, 8888);         System.out.println("连接建立成功...");                  //向服务器写入流         OutputStream os=socket.getOutputStream();         BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os));         Scanner input=new Scanner(System.in);                  while(true){             bw.write(input.next());             bw.newLine();             bw.flush();         }     } }

main:

package com.start;   import com.server.RunServer;   public class Go {       public static void main(String[] args) throws Exception {         // TODO Auto-generated method stub         RunServer rs=new RunServer();         rs.startServer();     }   }

效果:我是用虚拟机加本机

怎么用java socket实现局域网聊天

关于 "怎么用java socket实现局域网聊天" 就介绍到这。希望大家多多支持编程宝库

本文主要介绍"java怎么实现群聊功能" 有关的知识,希望能够解决您遇到有关问题,下面我们一起来看看这篇 "java怎么实现群聊功能" 文章。1、服务端package networkCoding; import j ...