socket编程
服务器端:
EchoServer.java文件
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class EchoServer extends Thread {
private static final int PORT=8888;
private EchoServer(){}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
EchoServer echoServer=new EchoServer();
if(echoServer!=null)
echoServer.start();
System.out.println("start");
}
final static int sleepTime=5;
public void run()
{
try{
ServerSocket server=new ServerSocket(PORT,10);
while(true)
{
Socket client=server.accept();
System.out.println("Client Connected");
while(true)
{
BufferedReader reader=new BufferedReader(
new InputStreamReader(client.getInputStream()));
System.out.println("read from client");
String textLine =reader.readLine()+"\n";
if(textLine.equalsIgnoreCase("EXIT\n"))
{
System.out.println("EXIT invoked,closing client");
break;
}
BufferedWriter writer=new BufferedWriter(
new OutputStreamWriter(client.getOutputStream()));
System.out.println("Echo input to client"+textLine);
String text="ECHO from server:"+textLine;
writer.write(text,0,text.length());
writer.flush();
}
client.close();
Thread.sleep(sleepTime);
}
}catch(IOException e)
{
e.printStackTrace();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
客服端:
Hello.java文件
package com.teleca.Socket;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class Hello extends Activity {
TextView textConent;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button = (Button) findViewById(R.id.Button01);
OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
mode =MODE_SOCKET;
doAction();
}
};
button.setOnClickListener(listener);
textConent = (TextView) findViewById(R.id.TextView01);
}
final static int MODE_SOCKET=0;
int mode;
final static String tag="hubin";
final static String ip="10.89.3.108";
final static String port="8888";
class ConnectThread implements Runnable {
public void run() {
Message message=Message.obtain(handler);
Bundle b=new Bundle();
if(mode==MODE_SOCKET)
{
String text=callSocket(ip,port,"Hello,Time is "+System.currentTimeMillis());
if(text==null)
{
message.what=FAIL;
b.putString("content", "Erro");
}
else
{
message.what=SUCCESS;
b.putString("content", text);
}
}
message.setData(b);
message.sendToTarget();
}
}
private String callSocket(String ip,String port,String socketData)
{
Socket socket=null;
BufferedWriter writer=null;
//BufferedReader reader=null;
InputStream is;
String output="Hello";
try
{
socket=new Socket(ip,Integer.parseInt(port));
writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
//reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
is=socket.getInputStream();
String input=socketData;
writer.write(input+"\n", 0, input.length()+1);
writer.flush();
Thread.sleep(100);
int size=is.available();
byte buffer[]=new byte[size];
is.read(buffer);
//output=reader.readLine();
output=new String(buffer);
Log.i(tag,"get success"+output);
writer.write("Exit\n",0,5);
writer.flush();
Log.i(tag,"send success");
}catch(IOException e)
{
Log.e(tag, "connect erro:",e);
}catch(InterruptedException e)
{
Log.e(tag, "Thread erro:",e);
}
return output;
}
final static int SUCCESS=0;
final static int FAIL=1;
Handler handler =new Handler(){
public void handleMessage(Message message){
Log.i(tag,"handle");
if(message==null)
return;
int what=message.what;
if(what==SUCCESS)
{
String text=message.getData().getString("content");
textConent.setText(text);
textConent.invalidate();
}
}
};
void doAction() {
Thread t=new Thread(new ConnectThread());
t.start();
}
}
注意1:AndroidManifest.xml中要加入权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
注意2:可用BufferedReader进行读