HardBirch

Android之Socket通信

时间:12-09-28 栏目:安卓源码解析与小应用 作者:张飞不张,文采横飞 评论:3 点击: 2,521 次

        马上就要中秋了,7+3=8有点伤不起啊,一直感到很颓废,这两个月也没有怎么更新过博客,也不知道该怎么写,不知道写什么,最近一个小项目,需要用到socket通信,和C#客户端。这种需求用到的不多,手机做Socket服务器,这种需求也用的不多。所以,就写点关于socket通信自己的一点心得吧!

        第一点:别忘了在manifest文件里面加访问网络权限

                      

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

 

         第二点:启动服务器,进行监听

new Thread(new SocketServerRun()).start();
    }

    class SocketServerRun implements Runnable {

		@Override
		public void run() {

			try {
				ServerSocket ss = new ServerSocket(Constant.LISTEN_PORT);
				while (true) {
					Socket s = ss.accept();
					br = new BufferedReader(new InputStreamReader(
							s.getInputStream() , "utf-8"));

					String strContent;
					if ((strContent = br.readLine()) != null ) {
						Message message = new Message();
					    message.obj = strContent;
					    mHandler.sendMessage(message);
					}

				    br.close();
				    s.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

    }

启动一个线程进行监听,不要在主线程(UI线程)进行网络操作,你知道的,有时候如果网络不好或者其他原因造成5秒的阻塞,那就ANR了。

  

ServerSocket ss = new ServerSocket(Constant.LISTEN_PORT);

启动一个ServerSocket监听一个端口号:如666、5558等等。

然后使用ServerSocket的accept()方法,该方法使server端程序一直处于等待状态,直到捕获到一个来自Client端的请求,然后返回用于和改Client通信的Socket对象s。直到server程序关闭,Client和Server端就可以进行读写操作了。在上面的代码中,只进行了写入操作。当然,也可以用以下语句进行写出操作:

 

PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream(), "utf-8")),true);
			out.println(str);

 

这是服务器端,客户端呢,相对来说更简单:

 

Socket socket = null;
				String message = mEditText.getText().toString() + "rn";
				try
				{
					//创建Socket
					socket = new Socket("192.168.1.16", 8091);
					//向服务器发送消息
					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();

创建Socket,通过IP地址和端口号对服务器端建立连接。然后进行通信。

第三点:关闭资源

              像创建的BufferedReader、PrintWriter、包括socket这些资源,一定要记得关闭。

 

//关闭流
					out.close();
					br.close();
					//关闭Socket
					socket.close();

`      好吧,今天就写到这吧。


 

声明: 本文由( 张飞不张,文采横飞 )原创编译,转载请保留链接: Android之Socket通信

Android之Socket通信:目前有3 条留言

  1. 地板
    android_bin:

    问个问题socket通信需要internet吗?

    2012-10-07 21:30 [回复]
  2. [reply]android_bin[/reply]
    需要,你也可以不加这个权限试一下。看看结果。

    2012-10-08 09:03 [回复]
  3. 沙发
    TC_fisher:

    OOO,不错

    2012-10-08 22:33 [回复]

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐