多语言展示
当前在线:501今日阅读:186今日分享:38

【Android】android中Socket进行通信

客户端通常可使用Socket的构造器来连接到指定服务器。今天说说android中进行Socket通信。
工具/原料

编译工具:Eclipse

方法/步骤
1

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

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();    }  }}

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()方法就可以接受一个超时时长参数。//创建一个无连接的SocketSocket s = new Socket();//让该Socket连接到远程服务器,如果经过10秒还没有连接到,//则认为连接超时s.connect(new InetAddress(host,port),10000);

注意事项
1

本步骤需要一定代码基础

2

程序代码以代码片段的形式展示

推荐信息