客户端:
package com.dada.handlefile;
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;
/**
* @author dada
* 客户端
*/
public class Client {
public static void main(String[] args) throws Exception, IOException {
Socket sClient = new Socket("localhost", 9999);
InputStream is = sClient.getInputStream();
DataInputStream dis = new DataInputStream(is);
OutputStream os = sClient.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
new ClientReader(dis).start();
new ClientWriter(dos).start();
}
}
/**
* @author dada
* 客户端读取类
*/
class ClientReader extends Thread {
DataInputStream dis;
public ClientReader(DataInputStream dis) {
super();
this.dis = dis;
}
@Override
public void run() {
String info;
while (true) {
try {
info = dis.readUTF();
System.out.println("对方说: " + info);
if (info.equals("bye")) {
System.out.println("对方下线");
System.exit(0);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* @author dada
* 客户端写出类
*/
class ClientWriter extends Thread {
DataOutputStream dos;
public ClientWriter(DataOutputStream dos) {
this.dos = dos;
}
@Override
public void run() {
String info;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
while (true) {
try {
info = br.readLine();
dos.writeUTF(info);
if (info.equals("bye")) {
System.out.println("自己下线");
System.exit(0);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
服务器端:
package com.dada.handlefile;
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;
/**
* @author dada
* 服务器端
*/
public class Server {
public static void main(String[] args) throws Exception {
//实例化一个服务器端的socket实例
ServerSocket ss = new ServerSocket(9999);
Socket sServer = ss.accept();
//获取输入流
InputStream is = sServer.getInputStream();
//封装DataInputStream是因为它可以以UTF的格式读取数据
DataInputStream dis = new DataInputStream(is);
//获取输出流
OutputStream os = sServer.getOutputStream();
//封装DataInputStream是因为它可以以UTF的格式读取数据
DataOutputStream dos = new DataOutputStream(os);
new ServerReader(dis).start();
new ServerWriter(dos).start();
}
}
/**
* @author Administrator
* 这个类主要是用来提供从服务器端的流读取数据的
*/
class ServerReader extends Thread {
DataInputStream dis;
public ServerReader(DataInputStream dis) {
this.dis = dis;
}
@Override
public void run() {
String info;
while (true) {
try {
info = dis.readUTF();
System.out.println("对方说: " + info);
if (info.equals("bye")) {
System.out.println("对方下线: ");
System.exit(0);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* @author Administrator
* 这个方法主要是提供从服务器端向外写数据服务的
*/
class ServerWriter extends Thread {
DataOutputStream dos;
public ServerWriter(DataOutputStream dos) {
super();
this.dos = dos;
}
@Override
public void run() {
String info;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
while (true) {
try {
info = br.readLine();
dos.writeUTF(info);
if (info.equals("bye")) {
System.out.println("自动退出!");
System.exit(0);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}