1.关闭输入输出流会自动关闭socket实例:关闭输出流之后再次获取输入流会抛错。
Socket socket = new Socket("127.0.0.1", 8001);
OutputStream outputStream = socket.getOutputStream();
DataOutputStream out = new DataOutputStream(outputStream);
out.writeUTF("Hello World");
out.flush();
outputStream.close();
System.out.println("socket是否关闭:" + socket.isClosed());// 输出true
InputStream inputStream = socket.getInputStream();
2.基于UDP连接demo:
问题:相同地址(127.0.0.1 8088)只能实例化一个DatagramSocket实例,服务器启动之后客户端启动会报地址占用错误!
代码如下:
服务端:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
/**
* @Author: Lon
* @Date: 2019/5/27 14:08
* @Description:
*/
public class DatagramSocketServer {
public static void main(String[] args) {
try {
System.out.println("启动服务,等待连接");
byte[] bytes = new byte[1024];
DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
DatagramSocket socket = new DatagramSocket(8088);
socket.receive(packet);
String string = new String(bytes, 0, bytes.length);
System.out.println("收到消息:" + string);
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端:
import java.io.IOException;
import java.net.*;
/**
* @Author: Lon
* @Date: 2019/5/27 13:59
* @Description:
*/
public class DatagramSocketClient {
public static void main(String[] args) {
try {
byte[] data = "Hello World...".getBytes();
InetAddress address = InetAddress.getLocalHost();
DatagramPacket packet = new DatagramPacket(data, data.length, address, 8088);
DatagramSocket socket = new DatagramSocket();
socket.send(packet);
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}