socket通信
一、创建服务器的步骤
1、指定端口实例化一个ServerSocket
ServerSocket severSocket = new ServerSocket(54321);
2、调用ServerSocket的accept()开始监听客户端的连接,并取得客户端的Socket对象client
Socket client = severSocket.accept();
3、获取位于底层Socket的流,以进行读写操作
//接受客户端的消息
InputStream is = client.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader in = new BufferedReader(isr);
String str = in.readLine();
//向客户端发送消息
OutputStream os = client.getOutputStream();
OutputStreamWriter osr = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osr);
PrintWriter out = new PrintWriter(bw,true);
out.println("server message");
4、关闭打开的流(注意:先关闭Writer,后关闭Reader)
in.close();
out.close();
二、创建客户端的步骤
1、通过服务器的IP地址和端口实例化一个Socket,请求连接服务器
socket = new Socket("ipdizhi",54321);
2、获取Socket上的流进行读写操作,把流包装进BufferedReader/PrintWriter的实例;并对socket进行读写
3、关闭流
以下附代码实例
1 public class Client extends Activity{ 2 private TextView mTextView = null; 3 private EditText mEditText = null; 4 private Button mButton = null; 5 6 @Override 7 public void onCreate(Bundle savedInstanceState) { 8 super.onCreate(savedInstanceState); 9 setContentView(R.layout.socket); 10 11 mTextView = (TextView)findViewById(R.id.textView1); 12 mEditText = (EditText)findViewById(R.id.editText1); 13 mButton = (Button)findViewById(R.id.button1); 14 15 mButton.setOnClickListener(new OnClickListener() { 16 17 @Override 18 public void onClick(View v) { 19 Socket socket = null; 20 String str = mEditText.getText().toString(); 21 try{ 22 socket = new Socket("ipdizhi",54321); 23 //向服务器发送消息 24 OutputStream os = socket.getOutputStream(); 25 OutputStreamWriter osr = new OutputStreamWriter(os); 26 BufferedWriter bw = new BufferedWriter(osr); 27 PrintWriter out = new PrintWriter(bw,true); 28 out.println(str); 29 30 //接收来自服务器的消息 31 InputStream is = socket.getInputStream(); 32 InputStreamReader isr = new InputStreamReader(is); 33 BufferedReader br = new BufferedReader(isr); 34 String msg = br.readLine(); 35 if(msg!=null){ 36 mTextView.setText(msg); 37 }else 38 mTextView.setText("数据错误"); 39 40 out.close(); 41 br.close(); 42 socket.close(); 43 }catch(Exception e){ 44 Log.e("socket",e.getMessage()+"close"); 45 e.printStackTrace(); 46 } 47 48 } 49 }); 50 } 51 52 }
1 public class Server implements Runnable{ 2 3 @Override 4 public void run() { 5 try{ 6 ServerSocket severSocket = new ServerSocket(54321); 7 while(true){ 8 //接收客户端请求 9 Socket client = severSocket.accept(); 10 try{ 11 //接受客户端消息 12 InputStream is = client.getInputStream(); 13 InputStreamReader isr = new InputStreamReader(is); 14 BufferedReader in = new BufferedReader(isr); 15 16 String str = null; 17 while((str=in.readLine())!=null){ 18 str = str+"\n"; 19 } 20 System.out.println("read:"+str); 21 22 //向客户端发送消息 23 OutputStream os = client.getOutputStream(); 24 OutputStreamWriter osr = new OutputStreamWriter(os); 25 BufferedWriter bw = new BufferedWriter(osr); 26 PrintWriter out = new PrintWriter(bw,true); 27 out.println("server message"); 28 29 //关闭流 30 in.close(); 31 out.close(); 32 }catch(Exception e){ 33 Log.e("111",e.getMessage()+"close"); 34 e.printStackTrace(); 35 } 36 finally{ 37 client.close(); 38 Log.e("finally","close"); 39 } 40 } 41 }catch(Exception e){ 42 Log.e("222",e.getMessage()+"close"); 43 } 44 } 45 //main函数,开启服务器 46 public static void main(String []a){ 47 Thread deskTopServerThread = new Thread(new Server()); 48 deskTopServerThread.start(); 49 } 50 }