【Android】android中Socket进行通信
1、Socket(InetAddress/String remoteAddress,int port):
创建连接到指定远程主机、远程端口的Socket,该构造器没有指定本地地址、本地端口,默认使用本地主机的默认IP地址,默认使用系统动态指定的IP地址。
Socket(InetAddress/String remoteAddress,int port,InetAddress localAddr,intlocalPort):
创建连接到指定远程主机、远程端口的Socket,并指定本地IP地址和本地端口,适用于本地主机有多个IP地址的情形。

2、代码实现如下
//创建连接到本机、20000端口的Socket
Socket 是= new Socket("192.168.1.121",20000);
//下面为可以使用的Socket进行通信
。。。

3、Socket提供了两个方法来获取输入流和输出流
InputStream getInputStreamStream():
返回该Socket对象对应的输入流,让程序通过该输入流从Socket中取出数据。
OutputStream getOutputStream():
返回该Socket对象对应的输出流,让程序通过该输出流向Socket中输出数据。

4、public class SimpleServer{ public static void main(String[] args) throws IOException {
// 创建一个ServerSocket,用于监听客户端Socket的连接请求 ServerSocket ss = new ServerSocket(20000); //① // 采用循环不断接受来自客户端的请求 while (true) { // 每当接受到客户端Socket的请求,服务器端也对应产生一个Socket Socket s = ss.accept(); OutputStream os = s.getOutputStream(); os.write("您好,您收到了服务器的新年祝福!\n".getBytes("utf-8")); // 关闭输出流,关闭Socket os.close(); s.close(); } }
}
<!-- 授权访问互联网-->
<uses-permission android:name="android.permission.INTERNET" />

5、Socket对象提供了一个setSoTimeout(int timeout)来设置超时时长。
Socket s = new Socket("192.168.1.121",20000);
//设置10秒之后即认为超时
s.setSoTimeout(10000);
try {
//使用Scanner来读取网络输入流中的数据
Scanner scan = new Scanner(s.getInputStream());
//读取一行字符
String line = scan.nextLine();
。。。
}catch(SocketTimeoutException ex) {
//对异常进行处理
。。。
}

6、Socket的所有构造器里都没有提供指定超时时长的参数,所以程序应用该先创建一个无连接的Socket,再调用Socket的connect()方法来连接远程服务器,而connect()方法就可以接受一个超时时长参数。
//创建一个无连接的Socket
Socket s = new Socket();
//让该Socket连接到远程服务器,如果经过10秒还没有连接到,
//则认为连接超时
s.connect(new InetAddress(host,port),10000);
