TCP Socket

来源:互联网 发布:网络安全员日常工作 编辑:程序博客网 时间:2024/05/23 19:28

1 .介绍TCP Socket

1)        两个Java应用程序可通过一个双向的网络连接实现数据交换,这个双向链路一端称为一个Socket。

2)        Socket通常用来实现client-server连接

3)        java.net包中定义的两个Socket和ServerDSocket,分别用来实现双向连接的client和server端

4)        建立连接时所需要的寻址信息为远程计算机的IP地址和端口(Port number)

2. TCP Socket通信模型 


3. TCP Socket例子

1)        首先,我们创建一个TestServerScoket.java的类,这个类是服务器端的Socket.在这个Socket中,我们需要指定服务器对外提供的端口,这个端口会时刻在监听着是否有客户端连接上。同时,当服务端接收到客户端的请求后,需要给客户端一个响应,那就是调用Socket的accept()方法。当然,服务端要获取客户端的请求信息或发给客户端的信息,分别使用Socket提供的getInputStrean()和getOutInputStream()方法。

 package com.owen.socket;import java.io.*;import java.net.*;/** * Socket服务端 * @author OwenWilliam 2016-7-24 * @since * @version v1.0.0 * */public class TestSocketServer{public static void main(String[] args){//输出流InputStream in = null;//输出流OutputStream out = null;try{//服务端提供的这个端口,给多个用户使用,所以客户端要想连接到这个服务,那么就要使用这个端口ServerSocket ss = new ServerSocket(6666);//等待客户端连接Socket socket = ss.accept();in = socket.getInputStream();out = socket.getOutputStream();DataOutputStream dos = new DataOutputStream(out);DataInputStream dis = new DataInputStream(in);String s = null;//输入的字节按UTF编码if ((s = dis.readUTF()) != null){System.out.println(s);//输出客户端的请求地址System.out.println("from: " + socket.getInetAddress());//这里打印出来的是客户端的端口,这个端口客户端随机生成的System.out.println("Port: " + socket.getPort());}//向客户端以信息dos.writeUTF("hi,hello");dis.close();dos.close();socket.close();} catch (IOException e){e.printStackTrace();}}}

2)        其次,我们需要创建一个客户端的类TestSocketClient.java。在这个类里,我们需要指定连接哪个服务器,所以我们需要填写需要连接那个服务器的端口,还有就是本机的IP地址。当然服务端要连接我们客户端,我们客户端也需要提供端口,不过不需要我去定义,因为我们的电脑会自动生成端口,提供给服务端。

 package com.owen.socket;import java.io.*;import java.net.*;/** * Socket的客户端 * @author OwenWilliam 2016-7-24 * @since * @version v1.0.0 * */public class TestSocketClient{public static void main(String[] args){//输入流InputStream is = null;//输出流OutputStream os = null;try{//指定请求的地址和端口号,这里的端口号是服务端提供的,作用是客户端与服务端连接//而对于客户端的端口,是本机自动生成的,服务端访问客户端的时候,就是用这个自动生成的。Socket socket = new Socket("localhost",6666);is = socket.getInputStream();os = socket.getOutputStream();DataInputStream dis = new DataInputStream(is);DataOutputStream dos = new DataOutputStream(os);//客户端请求服务端时的输出信息dos.writeUTF("hey");String s = null;//输入的字节按UTF编码if ((s = dis.readUTF()) != null ){System.out.println(s);dos.close();dis.close();socket.close();}} catch (IOException e){e.printStackTrace();}}}

3)        执行结果。

Client端:

服务端:



0 0
原创粉丝点击