socket java中怎么得到客户端端口号
时间: 2023-09-16 16:14:23 浏览: 226
在Java中,可以通过Socket对象的getPort()方法获取客户端的端口号。例如,以下代码将获取与客户端通信的Socket对象,并输出其端口号:
```
Socket clientSocket = serverSocket.accept(); // 等待客户端连接
int clientPort = clientSocket.getPort(); // 获取客户端端口号
System.out.println("客户端端口号:" + clientPort);
```
其中,serverSocket是一个ServerSocket对象,accept()方法会阻塞当前线程,直到有客户端连接上来。一旦有客户端连接上来,accept()方法会返回一个Socket对象,该对象代表与客户端的通信连接。通过Socket对象的getPort()方法即可获取客户端的端口号。
相关问题
java简易点名,学生输入老师配置服务端端口号,输入学生学号和姓名,请求点名,发送成功后,老师返回确认消息,并导出数据存入数据库中
好的,这是一个简单的 Java 点名系统的实现过程:
1. 配置服务端端口号。这一步可以在服务端代码中通过 `ServerSocket` 类来实现,指定一个端口号并监听客户端的连接请求。
2. 学生输入学号和姓名。可以通过 Java 的 `Scanner` 类来实现,读取从客户端传来的学生信息。
3. 请求点名。学生发送请求点名的消息到服务端,可以使用 Java 的 `Socket` 类来实现。
4. 老师返回确认消息。服务端接收到学生的请求后,可以返回一个确认消息给学生,表示已经收到了请求。
5. 数据库存储。服务端可以将点名信息存入数据库中,使用 JDBC 连接数据库并执行 SQL 语句完成存储操作。
下面是一个简单的 Java 代码实现,仅供参考:
```java
// 服务端代码
import java.io.*;
import java.net.*;
import java.sql.*;
public class Server {
public static void main(String[] args) throws Exception {
// 监听端口号
ServerSocket serverSocket = new ServerSocket(8888);
while (true) {
// 等待客户端连接
Socket socket = serverSocket.accept();
// 读取学生信息
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String studentInfo = reader.readLine();
// 返回确认消息
PrintWriter writer = new PrintWriter(socket.getOutputStream());
writer.println("点名请求已收到,确认点名成功!");
writer.flush();
// 存储到数据库
String[] student = studentInfo.split(",");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useSSL=false", "root", "password");
Statement stmt = conn.createStatement();
String sql = "INSERT INTO students VALUES ('" + student[0] + "', '" + student[1] + "')";
stmt.executeUpdate(sql);
conn.close();
}
}
}
// 客户端代码
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws Exception {
// 输入学生信息
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("请输入学号和姓名,以逗号分隔:");
String studentInfo = reader.readLine();
// 连接服务端
Socket socket = new Socket("localhost", 8888);
// 发送点名请求
PrintWriter writer = new PrintWriter(socket.getOutputStream());
writer.println(studentInfo);
writer.flush();
// 接收确认消息
BufferedReader serverReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String response = serverReader.readLine();
System.out.println("服务器响应:" + response);
socket.close();
}
}
```
需要注意的是,这只是一个简单的示例代码,实际应用中还需要考虑更多的异常情况和错误处理。
Java语言实现配置服务端端口号,开始进行电子 点名,等待学生端发送个人信息,将收到信息显示在学生名单中,点名结束后关 闭服务端服务。学生信息显示要求:学号 姓名 ip,每行表示一个学生。“导出 文件“实现将本次点名数据保存至数据库
要实现这个功能,可以采用Java中的Socket编程实现服务端和客户端之间的通信。具体步骤如下:
1. 服务端实现:在服务端,先创建一个ServerSocket对象,指定端口号,然后使用accept()方法监听客户端请求,一旦有客户端连接,就创建一个线程处理该客户端的请求。在线程中,可以使用InputStream读取客户端发送的信息,然后将信息显示在学生名单中。
2. 学生信息显示:在学生名单中,可以用一个列表来存储每个学生的信息。当收到一个学生的信息后,可以将其加入到列表中,并且更新显示。
3. 导出文件:在程序结束时,可以将学生名单中的数据保存到数据库中。可以使用JDBC连接数据库,并执行INSERT语句将数据插入到相应的表中。
下面是一个简单的示例代码,仅供参考:
服务端代码:
```
import java.io.*;
import java.net.*;
import java.util.*;
public class Server {
private ServerSocket serverSocket;
private List<String> studentList = new ArrayList<String>();
public Server(int port) throws IOException {
serverSocket = new ServerSocket(port);
System.out.println("Server started on port " + port);
}
public void start() throws IOException {
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("Client connected from " + clientSocket.getInetAddress().getHostAddress());
new ClientHandler(clientSocket).start();
}
}
public void addStudent(String student) {
synchronized(studentList) {
studentList.add(student);
}
}
public void exportData() throws SQLException {
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "");
Statement stmt = conn.createStatement();
for (String student : studentList) {
String[] fields = student.split(",");
String sql = "INSERT INTO students (id, name, ip) VALUES ('" + fields[0] + "', '" + fields[1] + "', '" + fields[2] + "')";
stmt.executeUpdate(sql);
}
stmt.close();
conn.close();
}
private class ClientHandler extends Thread {
private Socket clientSocket;
private PrintWriter out;
private BufferedReader in;
public ClientHandler(Socket socket) {
this.clientSocket = socket;
}
public void run() {
try {
out = new PrintWriter(clientSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
addStudent(inputLine);
System.out.println("Received student info: " + inputLine);
}
} catch (IOException e) {
System.out.println("Error handling client: " + e.getMessage());
} finally {
try {
if (in != null) in.close();
if (out != null) out.close();
clientSocket.close();
} catch (IOException e) {
System.out.println("Error closing client connection: " + e.getMessage());
}
}
}
}
public static void main(String[] args) {
int port = 1234;
try {
Server server = new Server(port);
server.start();
server.exportData();
} catch (IOException e) {
System.out.println("Error starting server: " + e.getMessage());
} catch (SQLException e) {
System.out.println("Error exporting data: " + e.getMessage());
}
}
}
```
客户端代码:
```
import java.io.*;
import java.net.*;
public class Client {
private Socket socket;
private PrintWriter out;
private BufferedReader in;
public Client(String host, int port) throws UnknownHostException, IOException {
socket = new Socket(host, port);
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
public void sendInfo(String info) {
out.println(info);
}
public void close() throws IOException {
if (in != null) in.close();
if (out != null) out.close();
socket.close();
}
public static void main(String[] args) {
String host = "localhost";
int port = 1234;
try {
Client client = new Client(host, port);
client.sendInfo("001,张三,192.168.0.1");
client.sendInfo("002,李四,192.168.0.2");
client.close();
} catch (IOException e) {
System.out.println("Error connecting to server: " + e.getMessage());
}
}
}
```
阅读全文