import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
* Create by wdful
* Email: wdful165177@gmail.com
* Date: 2017/4/7
*/
/*
* 聊天程序 一个线程控制收 一个线程控制发 同时执行
*/
//发送端
class Client implements Runnable {
private Socket s;
public Client(Socket s) {
this.s = s;
}
@Override
public void run() {
while (true) {
System.out.println(Thread.currentThread()+"客户端发信息:");
BufferedReader ins = new BufferedReader(new InputStreamReader(System.in));
String str = null;
try {
str = ins.readLine();
//为了发送数据 获取Socket中的输出流
OutputStream out = s.getOutputStream();
out.write(str.getBytes());
if ("886".equals(str)) {
System.out.println(Thread.currentThread()+": bye");
s.close();
System.exit(0);
}
} catch (IOException e) {
e.printStackTrace();
}
//获取数据
InputStream in = null;
try {
in = s.getInputStream();
byte[] data = new byte[1024];
int len = in.read(data);
System.out.println(Thread.currentThread()+"服务端对客户端说:");
System.out.println(new String(data, 0, len));
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class ServerClient implements Runnable {
private ServerSocket ss;
private Socket s;
public ServerClient(ServerSocket ss) {
this.ss = ss;
}
@Override
public void run() {
System.out.println("Server start ...");
//建立服务端socket服务 并监听一个端口
//获取客户端对象
try {
s = ss.accept();
//连接状态
System.out.println("Connected :" + s.getInetAddress().getHostAddress().toString() + " port:" + s.getPort());
} catch (IOException e) {
e.printStackTrace();
System.out.println("获取客户端失败!");
}
while (true) {
try {
//读取数据
InputStream in = s.getInputStream();
byte[] data = new byte[1024];
int len = in.read(data);
String str = new String(data, 0, len);
if ("886".equals(str)) {
System.out.println(Thread.currentThread()+": bye");
ss.close();
s.close();
System.exit(0);
}
System.out.println(Thread.currentThread()+"客户端对服务端说:");
System.out.println(str);
System.out.println(Thread.currentThread()+"服务端发信息:");
BufferedReader ins = new BufferedReader(new InputStreamReader(System.in));
//为了发送数据 获取Socket中的输出流
OutputStream out = s.getOutputStream();
out.write(ins.readLine().getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class ChatDemo {
public static void main(String[] args) throws IOException {
//服务端启动
ServerClient serverClient = new ServerClient(new ServerSocket(10000));
Thread t2 = new Thread(serverClient);
t2.start();
//客户端启动
Client client = new Client(new Socket("127.0.0.1",10000));
Thread t1 = new Thread(client);
t1.start();
}
}
java 多线程,socket 简单模拟聊天软件
最新推荐文章于 2019-12-19 21:36:56 发布