一.服务器端:
package com.chen.servier;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Time;
import java.util.Timer;
import java.util.TimerTask;
public class SocketServer {
BufferedWriter bufferedWriter;
BufferedReader reader ;
/**
* @Title: main
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param @param args 设定文件
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
SocketServer socketServer =new SocketServer();
socketServer.StartServer();
}
public void StartServer(){
Socket socket =null;
try {
@SuppressWarnings("resource")
ServerSocket serverSocket = new ServerSocket(9898);
System.out.print("Server start");
while(true){
socket =serverSocket.accept(); //阻塞状态 代码会在这行停住,等待客户端接入
manageConnection(socket);
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void manageConnection(final Socket socket){
new Thread(new Runnable() { //创建个子线程处理
@Override
public void run() {
try {
System.out.print("client"+socket.hashCode()+"connedted"+"\n");
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
bufferedWriter =new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
String receivedMsg;
while ((receivedMsg =reader.readLine())!=null) {
System.out.print("client"+socket.hashCode()+":"+receivedMsg);
bufferedWriter.write("server回复消息,client给我发的消息是:"+receivedMsg+"\n");
bufferedWriter.flush();
}
} catch (Exception e) {
} finally{
try {
reader.close();
bufferedWriter.close();
} catch (Exception e2) {
}
}
}
}).start();
}
}
二.客户端:
package com.chen.client;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class SocketClient {
/**
* @param args
*/
public static void main(String[] args) {
SocketClient client = new SocketClient();
client.start();
}
public void start() {
BufferedReader inputReader = null; // 从控制读取数据
BufferedReader reader = null;// 从socket读取数据
BufferedWriter writer = null;
Socket socket = null;
String inputContent;
try {
socket = new Socket("127.0.0.1", 9898);
writer = new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream()));
inputReader = new BufferedReader(new InputStreamReader(System.in));
startServerRepleyListener(reader); //启动子线程
reader = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
while (!(inputContent = inputReader.readLine()).equals("bye")) {
writer.write(inputContent + "\n");
writer.flush();// 强制提交内存里面还没有提交的内容
String response = reader.readLine();
System.out.print(response);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
inputReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void startServerRepleyListener(final BufferedReader reader) {
new Thread(new Runnable() {
@Override
public void run() {
String response;
try {
while((response=reader.readLine())!=null){
System.out.print(response);
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}