编译工具:Eclipse
Socket(InetAddress/String remoteAddress,int port):创建连接到指定远程主机、远程端口的Socket,该构造器没有指定本地地址、本地端口,默认使用本地主机的默认IP地址,默认使用系统动态指定的IP地址。Socket(InetAddress/String remoteAddress,int port,InetAddress localAddr,intlocalPort):创建连接到指定远程主机、远程端口的Socket,并指定本地IP地址和本地端口,适用于本地主机有多个IP地址的情形。
Socket提供了两个方法来获取输入流和输出流InputStream getInputStreamStream():返回该Socket对象对应的输入流,让程序通过该输入流从Socket中取出数据。OutputStream getOutputStream():返回该Socket对象对应的输出流,让程序通过该输出流向Socket中输出数据。
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(); } }}
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) { //对异常进行处理 。。。}
Socket的所有构造器里都没有提供指定超时时长的参数,所以程序应用该先创建一个无连接的Socket,再调用Socket的connect()方法来连接远程服务器,而connect()方法就可以接受一个超时时长参数。//创建一个无连接的SocketSocket s = new Socket();//让该Socket连接到远程服务器,如果经过10秒还没有连接到,//则认为连接超时s.connect(new InetAddress(host,port),10000);
本步骤需要一定代码基础
程序代码以代码片段的形式展示