服务器:
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();
}
}
}
}