思路为:在服务器端创建两个匿名线程,一个接收客户端发来的消息,并打印到控制台,另外一个线程是将控制台输入的内容输出给客户端. 在客户端也创建两个线程,一个将控制台输入的内容发送给客户端,另外一个是接收客户端发来的内容打印到控制台.
服务器端代码:
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class ServerTest { public static void main(String[] args) throws IOException { ServerSocket socket = new ServerSocket(23333); Socket soc = socket.accept(); new Thread(){ public void run(){ try { InputStream netIn = soc.getInputStream(); System.out.println("等待接收对方消息"); byte[] bytes = new byte[1024 * 6]; int len =0; while ((len = netIn.read(bytes)) != -1) { System.out.println("收到消息: "+new String(bytes,0,len)); } } catch (IOException e) { e.printStackTrace(); } } }.start(); new Thread(){ public void run(){ try { OutputStream netOut = soc.getOutputStream(); Scanner sc = new Scanner(System.in); String str; while (true) { str = sc.next(); netOut.write(str.getBytes()); sc = new Scanner(System.in); } } catch (IOException e) { e.printStackTrace(); } } }.start(); } }
客户端代码:
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.util.Scanner; public class ClintTest01 { public static void main(String[] args) throws IOException { Socket socket = new Socket("127.0.0.1",23333); new Thread() { public void run(){ Scanner sc = new Scanner(System.in); String str; try { OutputStream netOut = socket.getOutputStream(); System.out.println("连接成功开始聊天,请输入内容: "); while(true){ str = sc.next(); netOut.write(str.getBytes()); sc = new Scanner(System.in); } } catch (IOException e) { e.printStackTrace(); } } }.start(); new Thread(){ public void run(){ try { InputStream netIn = socket.getInputStream(); byte[] bytes = new byte[1024 * 7]; int len = 0; while ((len = netIn.read(bytes)) != -1) { System.out.println("收到消息: "+new String(bytes,0,len)); } } catch (IOException e) { e.printStackTrace(); } } }.start(); } }
控制台效果:
服务器端:
客户端: