教你轻松读懂Java中的Socket编程(1)(2)
Java中的socket编程
下面的部分我将通过一些示例讲解一下如何使用socket编写客户端和服务器端的程序。
注意:在接下来的示例中,我将使用基于TCP/IP协议的socket编程,因为这个协议远远比UDP/IP使用的要广泛。并且所有的socket相关的类都位于java.net包下,所以在我们进行socket编程时需要引入这个包。
客户端编写
开启Socket
如果在客户端,你需要写下如下的代码就可以打开一个socket。
String host = "127.0.0.1"; int port = 8919; Socket client = new Socket(host, port);
上面代码中,host即客户端需要连接的机器,port就是服务器端用来监听请求的端口。在选择端口时,需要注意一点,就是0~1023这些端口都已经被系统预留了。这些端口为一些常用的服务所使用,比如邮件,FTP和HTTP。当你在编写服务器端的代码,选择端口时,请选择一个大于1023的端口。
写入数据
接下来就是写入请求数据,我们从客户端的socket对象中得到OutputStream对象,然后写入数据后。很类似文件IO的处理代码。
public class ClientSocket { public static void main(String args) { String host = "127.0.0.1"; int port = 8919; try { Socket client = new Socket(host, port); Writer writer = new OutputStreamWriter(client.getOutputStream); writer.write("Hello From Client"); writer.flush; writer.close; client.close; } catch (IOException e) { e.printStackTrace; } } }
关闭IO对象
类似文件IO,在读写数据完成后,我们需要对IO对象进行关闭,以确保资源的正确释放。
服务器端编写
打开服务器端的socket
int port = 8919; ServerSocket server = new ServerSocket(port); Socket socket = server.accept;
上面的代码创建了一个服务器端的socket,然后调用accept方法监听并获取客户端的请求socket。accept方法是一个阻塞方法,在服务器端与客户端之间建立联系之前会一直等待阻塞。
读取数据
通过上面得到的socket对象获取InputStream对象,然后安装文件IO一样读取数据即可。这里我们将内容打印出来。
public class ServerClient { public static void main(String args) { int port = 8919; try { ServerSocket server = new ServerSocket(port); Socket socket = server.accept; Reader reader = new InputStreamReader(socket.getInputStream); char chars = new char[1024]; int len; StringBuilderbuilder = new StringBuilder; while ((len=reader.read(chars)) != -1) { builder.append(new String(chars, 0, len)); } System.out.println("Receive from client message=: " + builder); reader.close; socket.close; server.close; } catch (Exception e) { e.printStackTrace; } } }
关闭IO对象
还是不能忘记的,最后需要正确地关闭IO对象,以确保资源的正确释放。

用户点评