socket(java)
在java中,客户端套接字和服务端套接字是分开的。客户端套接字使用类Socket实现,常用的构造函数是:
public Socket(String host, int port)
此构造函数创建一个流套接字,并将其连接到指定主机上的指定端口号。但是这样创建的套接字默认是阻塞的,如果连接不到主机,它将会一直无限期地阻塞下去,直到它建立了到达主机的初始连接为止。可以通过先构建一个无连接的套接字,然后再使用一个超时来进行连接的方法解决这个问题。
Socket s = new Socket(); s.connect(new InetSocketAddress(host, port), timeout);
以下是简单的示例:
public class test{ public static void main(String[] args) { Socket s = new Socket("www.baidu.com", 80); InputStream inStream = s.getInputStream(); Scanner in = new Scanner(inStream); while(in.hasNextLine()) { String line = in.nextLine(); System.out.println(line); } } }
服务器的套接字使用ServerSocket类来建立:
ServerSocket s = new ServerSocket(8080); Socket in = s.accept();
8080是监听的端口,然后使用accept等待客户端的连接,接收到连接之后,返回一个Socket对象,对这个Socket对象进行操作,进行客户端与服务端的交流。交流的操作是从这个Socket对象的到输入流和输出流,然后使用输入流和输出流进行读写。以下是示例代码:
public class serverTest{ public static void main(String[] args) { ServerSocket s =new ServerSocket(8080); Socket ins = new s.accept(); InputStream inStream = ins.getInputStream(); OutputStream outStream = ins.getOutputStream(); Scanner in = new Scanner(inStream); PrintWriter out = new PrintWriter(outStream,true); boolean done = false; while(!done && in.hasNextLine()) { String line = in.nextLine(); out.println(line); if(line.trim().IgnoreEquals("bye")) done = true; } } }