java基础之网络(TCP-Socket)

来源:互联网 发布:中文相似度 python 库 编辑:程序博客网 时间:2024/05/10 08:49

一)Socket通信

  1)TCP协议是面向连接、可靠、有序的、以字节流的方式发送数据

2)基于TCP协议实现网络通信的类

1、客户端的Socket类

2、服务端的ServerSocket类

3)Socket通信实现步骤

1、创建ServerSocket和Socket

2、打开连接到Socket的输入、输出流

3、按照协议对Socket进行读写操作

4、关闭输入输出流、关闭Socket


4)

ServerSocket

public ServerSocket(int port)             throws IOException
创建绑定到特定端口的服务器套接字。端口 0 在所有空闲端口上创建套接字。 


public Socket accept()              throws IOException
侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。 


public void close()           throws IOException
关闭此套接字。 在 accept() 中所有当前阻塞的线程都将会抛出SocketException


Socket

public Socket(InetAddress address,              int port)       throws IOException
创建一个流套接字并将其连接到指定 IP 地址的指定端口号。 

public InputStream getInputStream()                           throws IOException
返回此套接字的输入流。 


public OutputStream getOutputStream()                             throws IOException
返回此套接字的输出流。

如果此套接字具有关联的通道,则得到的输出流会将其所有操作委托给通道。如果通道为非阻塞模式,则输出流的 write 操作将抛出 IllegalBlockingModeException。  



public void shutdownInput()                   throws IOException
此套接字的输入流置于“流的末尾”。发送到套接字的输入流端的任何数据都将被确认然后被静默丢弃。

如果在套接字上调用 shutdownInput() 后从套接字输入流读取内容,则流将返回 EOF(文件结束符)。 


public void shutdownOutput()                    throws IOException
禁用此套接字的输出流。对于 TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP 的正常连接终止序列。 如果在套接字上调用 shutdownOutput() 后写入套接字输出流,则该流将抛出 IOException。 


5)服务端
1、创建ServerSocket对象,绑定监听端口
2、通过accept()方法监听客户端请求
3、连接建立后,通过输入流读取客户端发送的请求信息
4、通过输出流向客户端发送响应信息
5、关闭相关资源
     客户端
1、创建Socket对象,指明需要连接的服务器的地址和端口号
2、连接建立后,通过输出流向服务器端发送请求信息
3、通过输入流获取服务器响应的信息
4、关闭相关资源





服务端:
//1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口ServerSocket serverSocket = new ServerSocket(8888);Socket socket = null;System.out.println("***服务器即将启动,等待客户端的连接***");//2、调用accept()方法开始监听,等待客户端的连接socket = serverSocket.accept();//3、获取输入流,并读取客户信息InputStream is = socket.getInputStream();//字节流信息InputStreamReader isr = new InputStreamReader(is);//将字节流包装为字符流BufferedReader br = new BufferedReader(isr);//为输入流添加缓冲String info = null;while ((info=br.readLine()) != null) {//循环读取客户端信息System.out.println("我是服务器,客户端说: " + info);}socket.shutdownInput();//关闭输入流//4、关闭资源br.close();isr.close();is.close();socket.close();serverSocket.close();





客户端:

//1.创建客户端Socket,指定服务器地址和端口Socket socket = new Socket("localhost",8888);//2.获取输出流,向服务器端发送信息OutputStream os = socket.getOutputStream();//字节输出流PrintWriter pw = new PrintWriter(os);//将输出流包装为打印流pw.write("用户名:xiaoli;密码:789");pw.flush();socket.shutdownOutput();//4.关闭资源pw.close();os.close();socket.close();


















0 0
原创粉丝点击