Android之Socket通信

        马上就要中秋了,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() + "\r\n"; 
				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(); 

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



评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值