TCP客户端用于连接TCP服务器,并向服务器发送请求,接收服务器返回的数据。客户端的套接字由Socket类创建。
Socket类的主要构造方法说明如下:
Socket(InetAddress address, int port)
该构造方法创建流套接字并将其连接到指定IP地址处的指定端口号。
Socket类的主要方法说明如下:
void bind(SocketAddress bindpoint)
该方法将将套接字绑定到bindpoint指定的IP地址和端口号。
void connect(SocketAddress endpoint)
该方法将此套接字连接到指定的IP地址和端口号,IP地址和端口号由endpoint指定。
void connect(SocketAddress endpoint, int timeout)
该方法将此套接字连接到指定的IP地址和端口号,IP地址和端口号由endpoint指定。参数timeout为连接超时时间。
void close()
该方法关闭此套接字。
案例1:编写TCP客户端程序。建立TcpClient类,连接前面课程创建的TCP服务,并输出服务器的返回数据到控制台。
在tcp包下新建TcpClient类。代码如下:
package tcp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
/**
* @ClassName: TcpClient
* @Description: 网络编程(构建TCP客户端)案例1
* @author 编程训练营
* @date
*
*/
public class TcpClient {
// 定义一个套接字
Socket socket;
// 定义端口号
int port;
// 定义IP地址
String ip;
// 构造方法
public TcpClient(String ip, int port) {
this.ip = ip;
this.port = port;
}
/**
* @Title: send @Description: 向TCP服务器发送请求 @param 参数
*
* @return void 返回类型 @throws
*/
public void send() {
System.out.println("客户端正在连接服务器...");
while (true) {
try {
// 实例化套接字,指定IP地址和端口号
// 套接字实例化后,会自动向服务器发送请求
socket = new Socket(ip, port);
// 向服务器端发送数据
PrintStream out = new PrintStream(socket.getOutputStream());
System.out.print("请输入: \t");
String str = new BufferedReader(new InputStreamReader(System.in)).readLine();
out.println(str);
// 读取服务器端返回的数据
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String ret = input.readLine();
System.out.println("服务器端返回过来的是: " + ret);
// 如接收到 "OK" 则断开连接
if ("OK".equals(ret)) {
System.out.println("客户端将关闭连接");
break;
}
out.close();
input.close();
} catch (Exception e) {
System.out.println("客户端异常:" + e.getMessage());
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
socket = null;
System.out.println("客户端 finally 异常:" + e.getMessage());
}
}
}
}
}
}编写TCP客户端程序的主要步骤如下:
(1)实例化Socket对象,创建套接字。套接字的IP地址需要和服务器的IP地址一致,如果TCP服务器没有指定IP地址,而是采用默认的IP地址,客户端套接字的IP地址可以是本地地址127.0.0.1,端口号必须一致。
(2)应用I/O类向服务器端写入数据,发送请求;
(3)应用I/O类读取服务端返回的数据;
(4)通信完成后,关闭Socket。
在tcp包下新建TcpClientTest测试类。代码如下:
package tcp;
/**
* @ClassName: TcpClientTest
* @Description: 网络编程(构建TCP客户端)案例1
* @author 编程训练营
* @date
*
*/
public class TcpClientTest {
/**
* @Title: main
* @Description:Java程序入口main方法
* @param @param args 参数
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
// 实例化client对象
TcpClient client = new TcpClient("127.0.0.1",9099);
// 向服务端发送请求
client.send();
}
}TcpClientTest程序实例化TcpClient对象,调用TcpClient对象的send()方法向服务器端发送请求。
客户端和服务器端测试步骤:
(1) 启动TCP服务器TcpServerTest;
(2) 启动客户端程序TcpClientTest;
(3) 在客户端程序控制台窗口输入hello,向服务器端发送输入的内容;
(4) 服务器端控制台窗口回显客户端发送的内容;
(5) 在服务器端控制台窗口输入OK,服务端向客户端返回在控制台输入的内容;
(6) 客户端判断返回的内容是OK时,结束连接。
程序执行结果如下图所示:

