服务器:
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; import javax.swing.JOptionPane; public class Thread_Server { public static void main(String[] args) { try { //创建服务器和端口 ServerSocket ss = new ServerSocket(6666); System.out.println("等待客户连接~~~~"); Socket s = ss.accept(); //等待客户连接 System.out.println("连接成功!"); //实例化线程实现类 ServerMessage sm = new ServerMessage(s); //启动线程 new Thread(sm, "接收").start(); new Thread(sm, "发送").start(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } //实现线程Runnable接口,实现连续发送或接受消息 class ServerMessage implements Runnable { private Socket s; //构造方法接收客户对象 public ServerMessage(Socket s) { this.s = s; } @Override public void run() { //判断是发送还是接收 if (Thread.currentThread().getName().equals("发送")) { write(); } else { read(); } } //接收消息的方法 public void read() { while (true) { try { //实例化数据输入流对象接收客户端消息 DataInputStream dis = new DataInputStream(s.getInputStream()); //打印客户端发送过来的信息 System.out.println("客户端:" + dis.readUTF()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } //发送信息的方法 public void write() { while (true) { try { //实例化数据输入流对象给客户端发送消息 DataOutputStream dos = new DataOutputStream(s.getOutputStream()); //通过输入框给客户端发送信息,避免eclipse的输入bug String str = JOptionPane.showInputDialog("请输入你要发送的信息:"); //打印自己发送的消息 System.out.println(str); //给客户端发送 dos.writeUTF(str); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }客户端:
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; import javax.swing.JOptionPane; public class Thread_Client { public static void main(String[] args) { try { //连接服务器 参数1:服务器的IP地址,参数2:服务器的端口号 Socket s = new Socket("192.168.5.106",6666); //实例化线程实现类 ClientMessage cm = new ClientMessage(s); //启动线程 new Thread(cm,"接收").start(); new Thread(cm,"发送").start(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } //实现线程Runnable接口,实现连续发送或接受消息 class ClientMessage implements Runnable { private Socket s; //构造方法接收客户对象 public ClientMessage(Socket s) { this.s = s; } @Override public void run() { //判断是发送还是接收 if(Thread.currentThread().getName().equals("发送")){ write(); }else{ read(); } } //接收消息的方法 public void read(){ while(true){ try { //实例化数据输入流对象接收服务器消息 DataInputStream dis = new DataInputStream(s.getInputStream()); //打印服务器发送过来的信息 System.out.println("服务器:"+ dis.readUTF()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } //发送信息的方法 public void write(){ while(true){ try { //实例化数据输入流对象给服务器发送消息 DataOutputStream dos = new DataOutputStream(s.getOutputStream()); //通过输入框给客户端发送信息,避免eclipse的输入bug String str = JOptionPane.showInputDialog("请输入你要发送的信息:"); //打印自己发送的消息 System.out.println(str); //给服务器发送 dos.writeUTF(str); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }