您的位置:首页 > 理论基础 > 计算机网络

android之socket网络编程

2011-05-20 15:24 573 查看
最近在学习android关于网络编程的知识,在这个过程中也遇到了不少问题,这篇文章是android基于socket的网络编程,能让人更好的了解网络编程底层的相关知识。其他话就不说了,直接看代码吧。

服务器端采用的是图形化界面:

package com.app.qrs;

import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class TestSocketActivity extends Activity {
private TextView mytextview;
private Button Rebnt;
Socket socket;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

try
{
mytextview = (TextView)findViewById(R.id.msgtextview);
Rebnt = (Button)findViewById(R.id.reflesh);
System.out.println("aaaa---------------->!");
System.out.println(InetAddress.getLocalHost());
/***
* 在socket所出现的问题是,用InetAddress.getloalhost()所得到的网址是不正确的,
* 它的值和server的本地服务器是不一样的,所以要在socket里的第一个参数准确传入
* 服务器的地址。
* 解决方法:
*         在服务器用Inetaddress.getlocalhost()方法获得地址。
*         将该地址放入客服端上socket的第一个参数
* ****/

socket = new Socket("192.168.1.103",10000);
System.out.println(InetAddress.getLocalHost()+"---------------2");
InputStream in = socket.getInputStream();
//直接将流放入字节流
byte[] buffer = new byte[in.available()];
in.read(buffer);
//String msg = new String(buffer);
/**
* 此句解决了在模拟器上的显示服务器上得到的中文流,
* 将字节流utf-8的格式转换为gb2312的中文显示(个人体会)
* ***/
String msg = new String(buffer,"gb2312");
/**
*
* 第二种读流方式,目前还没有找到此方法的中文显示方法
*         	 *
* ****/
//        	 while(true)
// 		    {
// 		    StringBuffer sb = new StringBuffer();
// 		    int c = 0;
// 		    while(((c=in.read())!='/n')&&(c!=-1))
// 		    {
// 		    	sb.append((char)c);
// 		    }
// 		    if(c==-1)
// 		    {
// 		    	String str = new String(sb);
// 		    	mytextview.setText(str);
// 		    	break;
// 		    }
// 		    }
mytextview.setText(msg);
Rebnt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
socket = new Socket("192.168.1.103",10000);
InputStream in = socket.getInputStream();
//直接将流放入字节流
byte[] buffer = new byte[in.available()];
in.read(buffer);
String msg = new String(buffer,"gb2312");
mytextview.setText(msg);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}catch(UnknownHostException e)
{

System.out.println(e.toString());
}catch(Exception e)
{
e.printStackTrace();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: