【翻译】java-TCP-socket网络编程1
参考网址:http://tutorials.jenkov.com/java-networking/sockets.html
我自己学习时做的一个总结,不妥之处请各位大哥指教,小弟先谢过!!
JavaTCP网络基础(Java TCP Networking Basics)
通常,客户机打开到服务器的TCP/IP连接。然后客户机开始与服务器通信。当客户端完成时,它会再次关闭连接。这里有一个例子:
客户端可以通过打开的连接发送多个请求。实际上,客户机可以发送服务器准备接收的数据的数量。如果愿意,服务器也可以关闭连接。
Java Socket's and ServerSocket's
为了在Java中通过internet(通过TCP/IP)连接到服务器,您需要创建一个Java .net. socket并将其连接到服务器。或者,您也可以使用Java NIO SocketChannel,以防您更喜欢使用Java NIO。
这个代码示例在端口80上以IP地址78.46.84.171连接到服务器。该服务器碰巧是我的web服务器(www.jenkov.com),而端口80是web服务器端口。
Socket socket = new Socket("78.46.84.171", 80);
您还可以使用域名而不是IP地址,如下所示:
Socket socket = new Socket("jenkov.com", 80);
要写入Java套接字,必须获得其OutputStream。这是过程:
Socket socket = new Socket("jenkov.com", 80);//新建一个socket OutputStream out = socket.getOutputStream();//用socket的getOutPutStream获取输出 out.write("some data".getBytes());//写入想要发送的数据 out.flush();//缓冲数据并将其以更大的块发送 out.close();//发完了就关闭流 socket.close();//全部交互结束,关闭socket。
要从Java套接字读取数据,需要获得其InputStream。这是过程:
Socket socket = new Socket("jenkov.com", 80);//新建一个socket InputStream in = socket.getInputStream();//用socket的getInputStream获取输入 int data = in.read();//读取数据 //... read more data... in.close();//关闭输入流 socket.close();//关闭socket连接
考虑上面的代码,应该思路就清晰了。
代理服务器:
上面看懂了,,,那我接着说。。。。
为了实现通过TCP/IP侦听来自客户机的传入连接的Java服务器,您需要使用Java .net. serversocket。如果您喜欢使用Java NIO而不是Java联网(标准API),那么您还可以使用ServerSocketChannel而不是Java .net. serversocket。
下面是一个简单的代码示例,它创建了一个监听端口9000的ServerSocket:
ServerSocket serverSocket = new ServerSocket(9000);
监听到来的连接请求:
为了接受传入的连接,必须调用ServerSocket.accept()方法。accept()方法返回一个套接字,其行为与普通Java套接字类似。以下是它的样子:
ServerSocket serverSocket = new ServerSocket(9000);//创建serverSocket boolean isStopped = false;//假如没有停止传输,持续监听 while(!isStopped){ Socket clientSocket = serverSocket.accept();//监听 //do something with clientSocket }
一旦客户端请求完成,并且没有从该客户端接收到进一步的请求,您必须关闭该套接字,就像关闭普通的客户端套接字一样。这是通过调用:
socket.close();
一旦这台服务器被关闭了,你还得关闭ServerSocket。这是通过下面的代码:
serverSocket.close();
那么就先写到这里。