要求:
- 编写两个java application应用程序,完成以下功能:
- 一个程序为服务端,建立TCP服务端套接字。
- 另外一个程序为客户端,建立TCP客户端套接字。
- 这两个程序可以互联,完成一个基于TCP/IP网络的文本聊天程序。
主要方法:
ServerSocket(int port); 创建绑定到特定端口的服务器套接字
accept(); 等待客户机的连接。若连接,则创建一套接字
程序:
1)服务器:
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class TCPDemo { // 创建类
private PrintWriter writer; //创建PrintWriter对象
private ServerSocket server; // 创建ServerSocket对象
private Socket socket; // 创建Socket对象socket
void serve() {
try {
server = new ServerSocket(8080); // 实例化ServerSocket对象,设置端口为8080
System.out.println("服务器套接字已经创建成功");
while (true) { // 如果套接字是连接状态
System.out.println("等待客户机的连接.......");
socket = server.accept(); // 实例化Socket对象,使用accept方法等待客户机连接
writer = new PrintWriter(socket.getOutputStream(), true);//建立通信通道,强行输出数据
writer.println("您已成功连接到远程服务器!"+"/"+"有什么可以帮你的吗?");//将信息写入流
writer.flush();//关闭流
Scanner sc=new Scanner(System.in);
Scanner sc1=new Scanner(socket.getInputStream());//从客户机里获得输入流并转化为Scanner对象
while(true){
String data = sc1.nextLine();
System.out.println("客户端:"+data);
System.out.print("服务端:");
String data1 = sc.nextLine();
writer.println(data1);//将数据写入流
writer.flush();//关闭流
}
}
} catch (Exception e) {
e.printStackTrace(); // 输出异常信息
}
}
public static void main(String[] args) { // 主方法
TCPDemo tcp = new TCPDemo(); // 创建本类对象
tcp.serve(); // 调用方法
}
}
2)客户端
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class TCP {
private PrintWriter writer; // 声明PrintWriter类对象
Socket socket; // 声明Socket对象
private void client() { // 连接套接字方法
System.out.println("尝试连接\n"); // 输出提示信息
try { // 捕捉异常
socket = new Socket("10.**.**.9", 8080); // 实例化Socket对象,连接端口8080服务器
writer = new PrintWriter(socket.getOutputStream(), true);//建立通信通道,强行输出数据
System.out.println("完成连接");
Scanner sc=new Scanner(socket.getInputStream());//获得服务机的输入流并转为Scanner对象
System.out.println(sc.nextLine());//输出信息
System.out.println("客户端:");
Scanner sc1=new Scanner(System.in);
while(true){
String data=sc1.nextLine();
writer.println(data);//将数据写入流
writer.flush();//关闭流
String data1=sc.nextLine();
System.out.println("服务端:"+data1);
System.out.println("客户端:");
}
} catch (Exception e) {
e.printStackTrace(); // 输出异常信息
}
}
public static void main(String[] args) { // 主方法
TCP clien = new TCP(); // 创建本例对象
clien.client(); // 调用连接方法
}
}
运行结果:
我在本机上运行服务器端程序,在虚拟机上运行客户端程序,结果如下: