六、java.net包

一、java.net包

Socket指的是客户端的Socket

ServerSocket指的是服务器端的Socket

accept()方法用来监听请求

二、具体实例

一、服务器端

一、首先定义服务器端的Scoket:服务器端是用的ServerSocket,通过ServerSocket来定义服务器端我的这个服务所对应的的端口数:ServerSocket serverSocket = new ServerSocket(5000)。

二、在服务器端用accept()方法来监听是否有人要访问我这个端口。accept()方法返回的是一个Socket对象,用Socket来接受: Socket socket = serverSocket.accept();(在accept()方法源码中,首先判断的应该是这个端口能不能被访问,根据状态的不同做出不同的回应;如果可以接受客户端的请求,那我就需要和你进行数据交换,那我自己就需要一个Socket,该方法直接创建了一个Socket对象。在本例中,因为ServerSocket 并没有被占用,所以可以做出回应。所以就直接创建并返回了一个Socket对象)。

三、我创建完我的Socket之后,就代表我可以跟你进行数据互换了。此时则可以调用Socket的 socket.getInputStream()方法,读取输入流数据:

InputStream is = socket.getInputStream();

BufferedReader br = new BufferedReader(new InputStreamReader(is));

String info;

while ((info = br.readLine()) != null) {

             System.out.println("客户端说:" + info);

}

四、在我服务器端读取了你提供过来的数据之后,我需要给你一个回应,此时通过 Socket的socket.getOutputStream()方法来输出数据:

String reply = "朕知道了";

OutputStream os = socket.getOutputStream();

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));

bw.write(reply);

五、结束之后关闭所有的流的socket:

bw.close();

os.close();

br.close();

is.close();

socket.close();

serverSocket.close();

二、客户端

一、我要向服务器发送请求服务,使用Socket,同时要提供服务器端的ip地址和我的请求的服务的端口数:Socket socket = new Socket("localhost", 5000);

二、要把我的数据通过socket 的socket.getOutputStream();方法传送出去,传送完毕之后要关闭socket:

String info = "用户名是:tom; pwd:123456";

byte[] infos = info.getBytes();

OutputStream os = socket.getOutputStream();

os.write(infos);

socket.shutdownOutput();

三、我要接受服务器给我发回来的数据,用socket.getInputStream()方法:

InputStream is = socket.getInputStream();

BufferedReader br = new BufferedReader(new InputStreamReader(is));

String reply;

while((reply = br.readLine()) != null){

           System.out.println(reply);

}

四、关闭所有的流:

br.close();

is.close();

os.close();

socket.close();

三、传对象

其实就是对象的序列化与反序列化

一、客户端

User user = new User("tom", "12345");

OutputStream os = socket.getOutputStream();

ObjectOutputStream oos = new ObjectOutputStream(os);

oos.writeObject(user);

socket.shutdownOutput();

二、服务器端

InputStream is = socket.getInputStream();

ObjectInputStream ois = new ObjectInputStream(is);

User user = (User)ois.readObject();

System.out.println(user.getUserName()+user.getPwd());

四、总结

综上,socket是什么?我一个计算机可以提供很多服务,但是我只有一个ip地址,我需要通过端口数来区分我提供的这些不同的服务,同时方便别的计算机识别与访问。当别的计算机需要请求我的某一个服务时,就需要和我进行数据交换,而socket就是数据交换的工具,我们不需要关心socket是怎么实现数据交换的,我们只用知道socket里面有获取输入输出流等方法可以让我们进行数据交换就行了。

你可能感兴趣的:(六、java.net包)