客户端
public class SocketClient {
public static void main(String[] args){
SocketClient client = new SocketClient();
client.start();
}
public void start(){
BufferedReader inputReader = null;
BufferedReader reader = null;
BufferedWriter writer = null;
Socket socket = null;
try {
socket = new Socket("127.0.0.1",9898);
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
inputReader = new BufferedReader(new InputStreamReader(System.in));
startServerReplyListener(reader);
String inputContent;
while(!(inputContent = inputReader.readLine()).equals("bye")){
System.out.println(inputContent);
writer.write(inputContent+"\n");
writer.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
reader.close();
writer.close();
inputReader.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private void startServerReplyListener(final BufferedReader reader) {
new Thread(new Runnable(){
public void run() {
String response;
try {
while((response = reader.readLine())!=null){
System.out.println("reply:"+response);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
}
服务端
public class SocketServer {
BufferedReader reader;
BufferedWriter writer;
public static void main(String[] args){
SocketServer client = new SocketServer();
client.startServer();
}
public void startServer(){
ServerSocket serverSocket=null;
Socket socket=null;
try {
serverSocket = new ServerSocket(9898);
System.out.println("server start");
while(true){
socket = serverSocket.accept();//阻塞状态
manageConnection(socket);
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void manageConnection(final Socket socket){
new Thread(new Runnable(){
public void run() {
try {
System.out.println("client"+socket.hashCode()+"connedted");
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
/**
* new Timer().schedule(new TimerTask(){
public void run() {
try {
System.out.println("heart beat once");
writer.write("heart beat once");
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
},3000,3000);
*/
String receivedMsg;
while((receivedMsg = reader.readLine())!=null){
System.out.println("client"+socket.hashCode()+":"+receivedMsg);
writer.write("server reply:"+receivedMsg+"\n");
writer.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
reader.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
}
}
客户端和服务端拿到socket对象的读写对象就可以互发消息