1. 指定端口实例化一个ServerSocket
2. 调用ServerSocket的accept()以在等待连接期间造成阻塞
3. 获取位于该底层socket的流以进行读写操作
4. 将数据封装成流
5. 对socket进行读写
6. 关闭打开的流
先关闭Reader在关闭Writer
服务器:import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;/** * @version 2012-7-26 下午04:04:18 **/public class servce implements Runnable { public void run() { try { // 创建ServerSocket ServerSocket serverSocket = new ServerSocket(54321); while(true) { // 接受客户端请求 Socket client = serverSocket.accept(); System.out.println("accept"); try { // 接受客户端消息 BufferedReader in = new BufferedReader( new InputStreamReader(client.getInputStream())); String str = in.readLine(); System.out.println("read:" + str); PrintWriter out = new PrintWriter(new BufferedWriter( new OutputStreamWriter(client.getOutputStream())), true); out.println("server message"); // 关闭流 in.close(); out.close(); } catch(Exception e) { System.out.println(e.getMessage()); } finally { client.close(); System.out.println("close"); } } } catch(Exception e) { System.out.println(e.getMessage()); } } /** * @param args */ public static void main(String[] args) { Thread d = new Thread(new servce()); d.start(); }}
使用socket实现客户端的步骤
1. 通过IP地址和端口实例化Socket,请求连接服务器
2. 获取Socket上的流以进行读写
3. 把流包装进BufferedReader/PrintWriter实例
4. 对Socket进行读写
5. 关闭打开的流使用iterSocket
客户端:import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class mainActivity extends Activity { EditText et; Button btn; TextView tv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); et = (EditText) findViewById(R.id.et1); btn = (Button) findViewById(R.id.btn1); tv = (TextView) findViewById(R.id.tv1); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Socket socket = null; String message = et.getText().toString() + "\r\n"; try { // 创建socket socket = new Socket("10.0.2.2", 54321); // 向服务器发送消息 PrintWriter out = new PrintWriter(new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())), true); out.println(message); // 接受来自服务器的消息 BufferedReader br = new BufferedReader( new InputStreamReader(socket.getInputStream())); String msg = br.readLine(); if(msg != null) { tv.setText(msg); } else { tv.setText("数据错误"); } // 关闭流 out.close(); br.close(); socket.close(); } catch(Exception e) { // TODO: handle exception } } }); }}这是一个服务器和客户端单独通信
版权声明:本文为博主原创文章,未经博主允许不得转载。