客户端实现(java.net.Socket)
构造方法:
Socket(String host,int port) host:服务器主机名称/服务器的IP地址 port:端口号
用到的成员方法:
OutputStream getOutputStream() 返回socket的输出流
InputStream getInputStream() 返回socket的输入流
void close() 关闭socket
实现步骤:
1.创建一个客户端对象Socket,构造方法绑定服务器的IP地址以及端口号
2.使用Socket对象的getOutputStream()获取网络字节输出流OutputStream对象
3.使用OutputStream对象的write(),给服务器发送数据
4.使用Socket对象的getInputStream() 获取网络字节输入流InputStream对象
5.使用InputStream对象的read(),读取服务器回写的数据
6.释放资源(Socket OutputStream InputStream)
注意:
1.客户端与服务器进行交互,必须使用Socket中提供的网络流,不能使用自己创建的流对象
2.当创建一个客户端对象Socket时,就会去请求服务器,和服务器经过3次握手建立连接通路,如果这时服务器未开启,则会报出异常。
package com.socket.TCPSocket; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; /* 客户端:向服务器发送请求,给服务器发送数据,读服务器回写的数据 Socket(套接字):包含了IP地址和端口号的网络单位 */ public class Client { public static void main(String[] args) { try { //1.创建一个客户端对象Socket,构造方法绑定服务器的IP地址以及端口号 Socket client=new Socket("127.0.0.1",8989); //2.使用Socket对象的getOutputStream()获取网络字节输出流OutputStream对象 OutputStream os=client.getOutputStream(); //3.使用OutputStream对象的write(),给服务器发送数据 os.write("你好服务器".getBytes()); //4.使用Socket对象的getInputStream() 获取网络字节输入流InputStream对象 InputStream is=client.getInputStream(); //5.使用InputStream对象的read(),读取服务器回写的数据 byte[] bytes=new byte[1024]; int len=is.read(bytes); System.out.println(new String(bytes,0,len)); //6.释放资源(Socket OutputStream InputStream) os.close(); client.close(); } catch (IOException e) { e.printStackTrace(); } } }
服务器端实现(java.net.ServerSocket)
构造方法:
ServerSocket(int port) 绑定客户端端口号
成员方法:
Socket accept() 侦听并接收到socket的连接
实现步骤:
1.创建服务器ServerSocket对象和系统要指定的端口号
2.使用ServerSocket的accept(),获取到请求的客户端对象Socket
3.使用Socket对象的getInputStream() 获取网络字节输入流InputStream对象
4.使用InputStream对象的read(),读取客户端发送的的数据
5.使用Socket对象的getOutputStream()获取网络字节输出流OutputStream对象
6.使用OutputStream对象的write(),给服务器发送数据
7.释放资源(Socket InputStream OutputStream)
package com.socket.TCPSocket; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; /* 接收客户端的请求,读取客户端发送的信息,给客户端回写数据 */ public class Server { public static void main(String[] args) { ServerSocket serverSocket= null; try { //1.创建服务器ServerSocket对象和系统要指定的端口号 serverSocket = new ServerSocket(8989);//参数是端口号 //2.使用ServerSocket的accept(),获取到请求的客户端对象Socket Socket server=serverSocket.accept();//与客户端建立连接 //3.使用Socket对象的getInputStream() 获取网络字节输入流InputStream对象 InputStream is=server.getInputStream(); //4.使用InputStream对象的read(),读取客户端发送的的数据 byte[] bytes=new byte[1024]; int len=is.read(bytes); System.out.println(new String(bytes,0,len)); //5.使用Socket对象的getOutputStream()获取网络字节输出流OutputStream对象 OutputStream os=server.getOutputStream(); //6.使用OutputStream对象的write(),给服务器发送数据 os.write("服务器已收到数据".getBytes()); //7.释放资源(Socket InputStream OutputStream) server.close(); serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } }