Java_Socket聊天室完整源代码
- 格式:doc
- 大小:82.00 KB
- 文档页数:5
1 / 5
以下代码实现的功能:
在一个局域网内,两人在Eclipse的控制台上,可以点对点的进行聊天,并且某一方可以同时输入多句话,以下时实例图片:
Server端的示意图:
Client端的示意图: 说明:
本人不才,Java初学者,自己平时也喜欢总结一些东西,然后与大家分享,同时希望得到Java高手的指正和指导,更希望能和广大的Java爱好者交朋友,共同学习Java,分享经验,一起进步。本人QQ:1134135987,非Java爱好者勿加,谢谢! 2 / 5
实现代码如下:
服务端代码:
import java.io.*;
import .*;
public class ServerTest3 {
public static void main(String[] args) throws Exception {
// 设置sever端的链接
ServerSocket s = new ServerSocket(8888);
Socket s1 = s.accept();// sever等待链接
System.out.println(s1.getInetAddress().getHostAddress()+"上线了");
// 实例化输出流
DataOutputStream dos = new
DataOutputStream(s1.getOutputStream());
// 实例化输入流
DataInputStream dis = new DataInputStream(s1.getInputStream());
// 实例化两个线程的对象
Thread msr = new MyServerReader(dis);
Thread msw = new MyServerWriter(dos);
// 启动线程
msr.start();
msw.start();
}
}
// 创建一个线程用来进行接收,读取数据
class MyServerReader extends Thread {
private DataInputStream dis;
public MyServerReader(DataInputStream dis) {
this.dis = dis;
} 3 / 5
public void run() {
String msg;
try {
while (true) {
msg = dis.readUTF();
System.out.println("客户端说:" + msg);
if (msg.equals("bye")) {
System.out.println("客户端下线,程序退出");
System.exit(0);
}
}
} catch (IOException e) {
System.out.println(e);
}
}
}
// 创建一个进程用来写入并发送数据
class MyServerWriter extends Thread {
private DataOutputStream dos;
public MyServerWriter(DataOutputStream dos) {
this.dos = dos;
}
public void run() {
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
String msg;
try {
while (true) {
msg = br.readLine();
dos.writeUTF(msg);
if (msg.equals("bye")) {
System.out.println("自己下线,程序退出");
System.exit(0);
}
}
} catch (IOException e) {
System.out.println(e);
}
}
} 4 / 5
客户端代码:
import java.io.*;
import .*;
public class ClientTest3 {
public static void main(String[] args) throws Exception, Exception
{
// 链接sever端
Socket s1 = new Socket("127.0.0.1", 8888);
// 实例化输入流
DataInputStream dis = new DataInputStream(s1.getInputStream());
// 实例化输出流
DataOutputStream dos = new
DataOutputStream(s1.getOutputStream());
// 实例化两个进程
Thread mcr = new MyClientReader(dis);
Thread mcw = new MyClientWriter(dos);
// 启动两个进程
mcr.start();
mcw.start();
}
}
// 创建一个线程用来进行接收读取数据
class MyClientReader extends Thread {
private DataInputStream dis;
public MyClientReader(DataInputStream dis) {
this.dis = dis;
}
public void run() {
String msg;
try {
while (true) {
msg = dis.readUTF();
System.out.println("服务端说:" + msg);
if (msg.equals("bye")) {
System.out.println("服务端下线,程序退出");
System.exit(0);
}
}
} catch (IOException e) { 5 / 5
System.out.println(e);
}
}
}
// 创建一个进程用来写入并发送数据
class MyClientWriter extends Thread {
private DataOutputStream dos;
public MyClientWriter(DataOutputStream dos) {
this.dos = dos;
}
@Override
public void run() {
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
String msg;
try {
while (true) {
msg = br.readLine();
dos.writeUTF(msg);
if (msg.equals("bye")) {
System.out.println("自己下线,程序退出");
System.exit(0);
}
}
} catch (IOException e) {
System.out.println(e);
}
}
}