关于 Socket 通信编程,以下描述正确的是:( )
Socket,又称套接字,是在不同的进程间进行网络通讯的一种协议、约定或者说是规范。
对于Socket编程,它更多的时候是基于TCP/UDP等协议做的一层封装或者说抽象,是一套系统所提供的用于进行网络通信相关编程的接口。
可以看到本质上,Socket是对TCP连接(当然也有可能是UDP等其他连接)协议,在编程层面上的简化和抽象。
创建一个ServerSocket类,同时在运行该语句的计算机的指定端口处建立一个监听服务,如:
ServerSocket serverSocket =new ServerSocket(600);
这里指定提供监听服务的端口是600,一台计算机可以同时提供多个服务,这些不同的服务之间通过端口号来区别,不同的端口号上提供不同的服务。为了随时监听可能的Client端请求,执行如下的语句:
Socket socket = serverSocket.accept();
该语句调用了ServerSocket对象的accept()方法,这个方法的执行将使Server端的程序处于阻塞状态,程序将一直阻塞直到捕捉到一个来自Client端的请求,并返回一个用于与该Client端通信的Socket对象。此后Server程序只需要向这个Socket对象读写数据,就可以向远端的Client端读写数据。结束监听时,关闭ServerSocket:
serverSocket.close();
ServerSocket一般仅用于设置端口号和监听,真正进行通信的是Server端的Socket与Client端的Socket。
当Client端需要从Server端获取信息及其他服务时,应创建一个Socket对象:
Socket socket = new Socket(“IP”,600);
// 用此句代替IP地址,url为你的域名 InetAddress.getByName("url");
当Server端和Client端的通信结束时,可以调用Socket类的close()方法关闭连接。
对于D
服务器端通过new ServerSocket()创建通信的Socket对象
创建是在accept()中实现的
public Socket accept() throws IOException { if (isClosed()) throw new SocketException("Socket is closed"); if (!isBound()) throw new SocketException("Socket is not bound yet"); Socket s = new Socket((SocketImpl) null); implAccept(s); return s; }
public static void main(String[] args) throws Exception{ ServerSocket serverSocket = new ServerSocket(); serverSocket.bind(new InetSocketAddress(8081)); ServerSocket serverSocket1 = new ServerSocket(8081); serverSocket.accept(); }