您的位置:首页 > 编程语言 > Java开发

java控制台实现QQ聊天程序

2014-06-02 23:12 656 查看
1、新建一个类,名为 Server  (服务器)

在Server类中编写如下代码:

import java.io.BufferedReader;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.net.ServerSocket;

import java.net.Socket;

public class Server {
public static void main(String[] args) {

try {
//设置server端的连接
ServerSocket s = new ServerSocket(8888);
Socket s1 = s.accept();//server等待连接

//实例化输出流
OutputStream os = s1.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);

//实例化输入流
InputStream is = s1.getInputStream();
DataInputStream dis = new DataInputStream(is);

//实例化两个线程的对象
Thread msr = new MyServerReader(dis);
Thread msw = new MyServerWriter(dos);

//启动线程
msr.start();
msw.start();

} catch (IOException e) {

e.printStackTrace();
}
}

}

//创建一个线程用来进行接收读取数据

class MyServerReader extends Thread{
private DataInputStream dis;
public MyServerReader( 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){
e.printStackTrace();
}
}

}

//创建一个线程用来写入并发送数据

class MyServerWriter extends Thread{
private DataOutputStream dos;
public MyServerWriter( DataOutputStream dos){
this.dos = dos;

}
public void run(){
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String msg;
try{
while(true){
msg = br.readLine();
dos.writeUTF(msg);
if(msg.equals("bye")){
System.out.println( "自己下线,程序退出!" );
System.exit(0);
}
}
}catch(IOException e){
e.printStackTrace();
}
}

}

2、再新建一个类,名为Client (客户端)

在Client类中编写如下代码:

import java.io.BufferedReader;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.net.Socket;

import java.net.UnknownHostException;

public class Client {
public static void main(String[] args) {

try {
//连接server端
Socket s1 = new Socket("localhost",8888);
//实例化输入流
InputStream is = s1.getInputStream();
DataInputStream dis = new DataInputStream(is);
//实例化输出流
OutputStream os = s1.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
//实例化两个线程
Thread mcr = new MyClientReader(dis);
Thread mcw = new MyClientWriter(dos);

mcr.start();
mcw.start();

} catch (UnknownHostException e) {

e.printStackTrace();
} catch (IOException e) {

e.printStackTrace();
}
}

}

//创建一个线程,用来接收读取数据

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){
e.printStackTrace();
}
}

}

//创建一个线程,用来写入并发送数据

class M
4000
yClientWriter extends Thread{
private DataOutputStream dos;
public MyClientWriter( DataOutputStream dos){
this.dos = dos;
}
public void run(){
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String msg;
try{
while(true){
msg = br.readLine();
dos.writeUTF(msg);
if(msg.equals("bye")){
System.out.println( "自己下线,程序退出!" );
System.exit(0);
}
}

}catch(IOException e){
e.printStackTrace();
}
}

}

3、此时代码部分已经编写完。先运行Server,再运行Client,在两个控制台中分别输入信息,即可畅享QQ聊天。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: