目录
步骤概述
Socket与ServerSocket。
建立客户端和服务器端。
建立连接后,通过Socket中的IO流进行数据的传输。
关闭Socket。
客户端与服务器端是两个独立的应用程序。
常用方法
Socket(InetAddress address, int port):创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
OutputStream getOutputStream():返回此套接字的输出流。
InputStream getInputStream():返回此套接字的输入流。
InetAddress getInetAddress():返回套接字连接的地址。
void close():关闭此套接字。
ServerSocket(int port):创建绑定到特定端口的服务器套接字。
Socket accept():侦听并接受到此套接字的连接。
void close():关闭此套接字。
示例
需求:演示Tcp传输
1.tcp分客户端和服务端。
2.客户端对应的对象是Socket;服务端对应的对象是ServerSocket。
客户端
需求:定义IP地址与端点发送数据到指定服务端。
通过查阅Socket对象,发现在该对象建立时,就可以去连接指定主机。
因为tcp是面向连接的,所以在建立Socket服务时,就要有服务端存在,并连接成功。形成通路后,在该通道进行数据的传输。
步骤:
1.创建Socket服务,并指定要连接的主机和端口。
2.获取Socket流中的输出流,将数据写到该流中,通过网络发送给服务端。
3.关闭客户端。
服务端
需求:定义端点接收数据并打印在控制台上。
步骤:
1.建立服务端的Socket服务,ServerSocket();
2.获取连接过来的客户端对象。
通过ServerSocket的accept()方法。没有连接就会等待,所以这个方法是阻塞式方法。
3.客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据,并打印在控制台上。
4.关闭服务器。(可选)
编码
import java.io.*;
import java.net.*;
class TcpClient{ // 客户端
public static void main(String[] args)throws Exception{
// 创建客户端的Socket服务,指定目的主机和端口。
Socket s=new Socket("192.168.0.104",10003);
// 为了发送数据,应该获取Socket流中的输出流。
OutputStream out=s.getOutputStream();
out.write("Tcp Dmeo...".getBytes());
s.close();
}
}
class TcpServer{ // 服务端
public static void main(String[] args)throws Exception{
// 建立服务端Socket服务,并监听一个端口。
ServerSocket ss=new ServerSocket(10003);
// 通过accept()方法获取连接过来的客户端对象。
Socket s=ss.accept();
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip+" is connected");
// 获取客户端发送过来的数据,那么套使用客户端对象的读取流来读取数据。
InputStream in=s.getInputStream();
byte[] buf=new byte[1024];
int len=in.read(buf);
System.out.println(new String(buf,0,len));
s.close(); // 关闭客户端。
ss.close(); // 关闭服务器。
}
}