一.题目要求如下:
1.编写客户端程序,连接同一服务器,并实现发送线程和接收线程,发送的信息中应包括“消息+发送时间”,显示消息应包括:“Socket+信息+发送时间”。(GUI实现后续完成)
2.编写服务器端程序,使用TCP Socket启动12345端口,判断该端口是否被占用,可以接收多个客户端的连接(连接成功发出欢迎信息“Welcome”+客户端套接字信息),并将Socket保存在Vector中,将收到的信息转发给所有连接的客户端。(GUI实现后续完成)
二.具体代码实现案例
1.服务器端代码如下:(先有服务器再有客户机,故此处先给出服务器端程序)
package day26.tcp.test;
/*
* 编写服务器端程序,使用TCP Socket启动12345端口,判断该端口是否被占用,可以接收多个客户端的连接
* (连接成功发出欢迎信息“Welcome”+客户端套接字信息),并将Socket保存在Vector中,将收到的信息转
* 发给所有连接的客户端
* */
import java.net.*;
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ServerTest {
public static void main(String[] args) throws IOException{
//统计连接客户机并标记,初始为0
int count = 0;
//这里用List代替Vector,用来保存客户机的Socket信息
List<Socket> li = Collections.synchronizedList(new ArrayList<Socket>());
//创建服务器Socket对象
while(true){
System.out.println("服务器等待建立连接...");
try (ServerSocket ss = new ServerSocket(12345)) { //这种方式会自动释放资源
//监听客户端Socket对象
Socket s = ss.accept();
//每次有客户机建立连接就标记加一,并且把其Socket信息添加到集合
count++;
li.add(s);
//启动服务器线程
new Thread(new UserThread(s,count,li)).start();
System.out.println("连接成功!");