首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Android Socket编程要义简记

2013-09-26 
Android Socket编程要点简记//创建服务器连接Socket socketnew Socket(192.168.1.1, 8080)//数据包装O

Android Socket编程要点简记

                 //创建服务器连接Socket socket=new Socket("192.168.1.1", 8080);//数据包装OutputStream os=socket.getOutputStream();OutputStreamWriter osw=new OutputStreamWriter(os);BufferedWriter bw=new BufferedWriter(osw);//写入数据bw.write("hello world!\r\n\r\n");//刷新发送bw.flush();//包装InputStream is=socket.getInputStream();InputStreamReader isr=new InputStreamReader(is);BufferedReader br=new BufferedReader(isr);String str="";//循环读取while ((str=br.readLine())!=null) {System.out.println(str);}//记得关流os.close();is.close();socket.close();/** * 那些情况会关流 * 一般我们调用socket.close()就会关闭留,但还有其他情况也会关闭socket流 * 1.直接调用socket.close(); * 2.只要inputStream和OutputStream流有一个关闭了,则网络连接自动关闭如(inputStream.close();和outputStream.close();); * 3.在程序退出时网络连接自动关闭 * 4.将socket置为null是,虚拟机就会回收这个对象,所以也会关闭连接。 * 5.在Socket被新的Socket对象覆盖也同4那样关闭连接 *  * Socket.isClose()可以查看Socket是否已经关闭 *  *///用Socket.connect方法连接服务器Socket socket2=new Socket();socket2.connect(new InetSocketAddress("192.168.1.1", 8080));//设置连接超时socket2.connect(new InetSocketAddress("192.168.1.1", 8080),5000);/** * 网络连接超时有两种,连接超时和读取超时 *  * 1.只有通过 Socket.connect 方法才能指定连接超时的时间。 * 由于使用 connect 方法连接服务器必 * 须要指定IP 和端口,因此,无效的 IP 或端口将会抛出连接超时异常。  * 2.在连接服务器成功后,Socket 所做的最重要的两件事就是“接收数据”和“发送数据”,而在 *接收数据时可能因为网络延迟、网络阻塞等原因,客户端一直处于等待状态,当客户端等待一段时 *间后,如果服务器还没有发送数据到客户端,那么客户端Socket 将会抛出一个超时异常。  *我们可以通过Socket.setSoTimeout方法来设置读取数据超时的时间。时间的单位是毫秒。这个 *方法必须在读取数据之前调用才会生效。如果将超时时间设为0,则不使用超时时间。也就是说, *客户端什么时候和服务器断开,将完全取决于服务端程序的超时设置。如下面的代码将读取数据超 *时时间设为5秒。 * Socket socket=new Socket(); * socket.setSoTimeout(5000); * socket.connect(...); * socket.getInputStream().read(); * 要注意的是不要将设置连接超时和读取数据超时设置得太小,如果值太小,如100,可能会造 * 成服务器的数据还没来得及发过来,客户端就抛出超时异常的现象。 *  *  *///设置关闭延迟,有时候在需要关闭连接时还有数据要发就需要设置这个关闭延迟socket.setSoLinger(true, 30000);//Socket的可用选项//TcpNodelay发送不延迟,当数据包很小的时候会等待连接到大包上一起//发送出去,设置了这个就可以关闭这个功能,立刻发送出去不延迟socket.setTcpNoDelay(true);//so_reuseaddr设置这个可以使多个Socket对象绑在同一个端口上socket.setReuseAddress(true);//so_timeout读取数据延迟socket.setSoTimeout(5000);//so_sndbuf默认情况下发送缓冲大小为8KB,可以在这里改这个值socket.getSendBufferSize();socket.setSendBufferSize(10*1024);//so_rcvbuf接收缓冲大小,默认也为8KBsocket.getReceiveBufferSize();socket.setReceiveBufferSize(10*1024);//so_keepalive 默认关闭,如果将这个 Socket 选项打开,客户端 Socket 每隔一段时间(大约两个小时)就会利用空闲的//连接向服务器发送一个数据包。这个数据包并没有其他的作用,只是为了检测一下服务器是否仍处//于活动状态。socket.setKeepAlive(true);//so_oobinline 如果这个 Socket 选项打开,可以通过 Socket 类的 sendUrgentData 方法向服务器发送一个单字//节的数据。这个单字节数据并不经过输出缓冲区,而是立即发出。

热点排行