本帖最后由 qq243559086 于 2024-9-13 13:42 编辑
在Android中: - try {
- ServerSocket serverSocket = new ServerSocket(null);// 这里设置为null,setReuseAddress才会有效
- serverSocket.setReuseAddress(true); // 先设置端口复用
- serverSocket.bind(new InetSocketAddress(12345));
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- try {
- DatagramSocket ds = new DatagramSocket(null);// 这里设置为null,setReuseAddress才会有效
- ds.setReuseAddress(true);// 可复用端口号
- ds.bind(new InetSocketAddress(12345));
- } catch (SocketException e) {
- throw new RuntimeException(e);
- }
复制代码在iOS中: - GCDAsyncUdpSocket *_udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
- NSError *error;
- [_udpSocket enableReusePort:YES error:&error];
- // [_udpSocket bindToPort:12345 error:&error];// 不设置enableReusePort:YES, 就必须先绑定端口才能 receive
- if (error) {
- NSLog(@"端口绑定--%@--", error);
- return nil;
- }
- error = nil;
- [_udpSocket beginReceiving:&error];
- if (error) {
- NSLog(@"--%@--", error);
- return nil;
- }
复制代码设置端口复用的意义在于,当占用此端口的sorket关闭后,可以立即用其他sorket绑定此端口,否则就要等待系统设定的超时时间后才能绑定此端口。 端口复用不要理解成,一个端口可以同时被多个sorket绑定。
|