大体思路
服务器开一个无线循环一直监听8688端口,如果有程序连进来就建立连接,然后从socket中获得输入输出流,在一个无限循环中不断地readline()(这个函数是堵塞的,如果连接断开则会返回null那么这时候就结束循环),客户端也是这样无限循环中不断地读,注意printwriter的构造器中要把自动刷新设为TRUE;
用Socket要设置网络权限;
服务器端代码
建立接口监听,每有一个进程连进来就新开一个进程
ServerSocket serverSocket=null;
try{
serverSocket=new ServerSocket(8688);
} catch(IOException e){
Log.i(TAG,"establish tcp server failed,port:8689");
e.printStackTrace();
return;
}
while (!mIsServiceDestoryed){
try{
final Socket client=serverSocket.accept();
Log.i(TAG,"Accept");
new Thread(){
@Override
public void run() {
try{
Log.i(TAG,"Run");
responseClient(client);
} catch(IOException e){
e.printStackTrace();
}
}
}.start();
}catch(IOException e){
e.printStackTrace();
}
}
服务器端对话代码
private void responseClient(Socket client) throws IOException{
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())),true);
out.println("welcome");
Log.i(TAG,"response");
while (!mIsServiceDestoryed){
Log.i(TAG,"before readline");
String str=in.readLine();
Log.i(TAG,Thread.currentThread().getName()+"#receive#"+str);
if (str==null) break;
int i=new Random().nextInt(mDefinedMessages.length);
// Log.i(TAG,"i");
String msg=mDefinedMessages[i];
// Log.i(TAG,msg);
out.println(msg);
// Log.i(TAG,Thread.currentThread().getName()+"#send#"+msg);
}
Log.i(TAG,Thread.currentThread().getName()+"#mode#"+"quit"+"DE?:"+mIsServiceDestoryed);
in.close();
out.close();
client.close();
}
客户端代码
客户端连接代码
new Thread(){
@Override
public void run() {
Socket socket;
while(true){
try {
socket = new Socket("localhost", 8688);
Log.i(TAG,"success");
break;
} catch(IOException e){
Log.i(TAG,"fail to connected!retry......");
SystemClock.sleep(400);
}
}