/*服务器端*/
package socket;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
@classname:soccketDemo
@author:aionbo
@date:上午10:35:40
@work:
*/
public class Server {
private ServerSocket server;
private Socket socket;
public Server() throws IOException{
server=new ServerSocket(9595);
}
/*
* 服务器服务
*/
public void service(){
System.out.println("server start...");
while(true){
try {
socket =server.accept();//阻塞
//Thread t =new Thread(new TcpThread(socket));//implements Runnable
TcpThread t=new TcpThread(socket);
System.out.println(t.getName());
t.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
try {
new Server().service();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/*
* 多线程通信
*/
class TcpThread extends Thread{//implements Runnable
Socket socket;
public TcpThread(Socket s){
socket=s;
}
/*
* 信息追加
*/
public String echo(String str){
return "hello:"+str;
}
@Override
public void run() {
try{
// TODO Auto-generated method stub
System.out.println("连接成功,IP地址:"+socket.getInetAddress()+" 端口:"+socket.getPort());
//获得客户端的消息
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF8"));
//服务器的响应消息
BufferedWriter bw =new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF8"));
//PrintWriter pw=new PrintWriter(socket.getOutputStream(),true);
//DataOutputStream dos=new DataOutputStream(socket.getOutputStream());
while(true){
String str=br.readLine();
if(str.equals("exit")){
//pw.close();
bw.close();
//dos.close();
br.close();
socket.close();
break;
}
System.out.println(str);
Thread.sleep(100);
// pw.println(echo(str));
// pw.flush();
bw.write(echo(str)+"\r\n");
bw.flush();
// dos.writeUTF(echo(str)+"\r\n");
// dos.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("客户端关闭");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/*客户端*/
package socket;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
new ClientThread().start();;
}
}
class ClientThread extends Thread{
Socket socket;
ClientThread() throws UnknownHostException, IOException{
socket=new Socket("127.0.0.1",9595);
}
public void run(){
try {
@SuppressWarnings("resource")
//Socket socket=new Socket("127.0.0.1",9595);
//获得客户端的响应消息
BufferedReader brr=new BufferedReader(new InputStreamReader((System.in),"UTF8"));
//获得服务端的消息
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF8"));
//客户端的响应消息
BufferedWriter bw =new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF8"));
//PrintWriter pw=new PrintWriter(socket.getOutputStream(),true);
// DataOutputStream dos=new DataOutputStream(socket.getOutputStream());
while(true){
String str=brr.readLine();//阻塞
// pw.println(str);
// pw.flush();
bw.write(str+"\r\n");
bw.flush();
// dos.writeUTF(str+"\r\n");
// dos.flush();
if(str.equals("exit")){
brr.close();
br.close();
break;
}
Thread.sleep(100);
System.out.println(br.readLine());
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("服务器未启动");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}