android socket通信
<div id="cnblogs_post_body">一、创建服务器的步骤
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、关闭流
三、网络通信中的乱码问题
原因:通信过程中使用了不同的编码方式:服务器中的、传输过程中的,终端设备的
办法:getBytes("编码方式");//对汉字进行重编码,得到它的字节数组
new String(Bytes[],"解码方式");//对字节数组进行相应的编码
实例:1、将流先转换为字节,再将字节按GB2312的方式转换得到字符串
InputStream is = con.getInputStream();
BufferedInputStream bis= new BufferedInputStream(is));
byte a[] = new byte;
int currrent = -1;
int i=0;
while((currrent= bis.read())!=-1){
byte a = (byte)current;
i++;
}
result = new String(a,"GB2312");
2、在数据传递过程中使用ISO-8859-1字符集,在传递到终端设备时,将数据反转
public static String FormotStr(String str){
if(str==null||str=="") return "";
try{
return new String(str.getBytes("ISO-8859-1"),"bgk");
}catch (UnsupportedEncodingException e){
return str;
}
}
以下附代码实例
<div class="cnblogs_code" >http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gifhttp://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gifClient<div id="cnblogs_code_open_b350c1d4-bffb-4626-9ba5-df5603fa7018" class="cnblogs_code_hide"> 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 @Override18 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 }else38 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]