socket编程JAVA
时间: 2025-01-01 20:29:51 浏览: 11
### Java Socket编程教程
#### 什么是Socket?
在网络环境中,不同计算机之间通过网络协议进行通信。而Socket则是应用程序与底层网络协议之间的接口,在Java中用于实现网络通信[^1]。
#### Socket通信原理
Socket通信主要依赖于传输控制协议/因特网互联协议(TCP/IP),其中包含了面向连接的TCP以及无连接的UDP两种方式。对于基于流的传输(即TCP协议),其特点是可靠的数据传输;而对于基于数据报的传输(即UDP协议),则更强调速度而非可靠性[^3]。
#### 创建ServerSocket与Socket对象
为了使两台机器上的程序能够相互通信,一方需作为服务端监听特定端口等待请求到来,另一方作为客户端主动发起连接请求。这分别对应着`ServerSocket`类和服务端逻辑,还有`Socket`类代表客户端实例化过程:
```java
// 定义服务器端口号并创建ServerSocket对象
int port = 8080;
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("服务器已启动...");
while(true){
// 接受来自客户端的新连接
try(Socket clientSocket = serverSocket.accept()){
System.out.println("新客户接入:" + clientSocket.getInetAddress().getHostAddress());
// 处理业务...
}
}
} catch(IOException e) {
e.printStackTrace();
}
```
上述代码展示了基本的服务端设置流程,这里使用了资源管理语法糖来简化关闭操作。
对于客户端而言,则只需指定目标主机地址及端口即可尝试建立连接:
```java
String hostName = "localhost";
int port = 8080;
try (Socket echoSocket = new Socket(hostName, port)){
// 进行业务交互...
}catch(UnknownHostException ex){
System.err.println("无法找到主机:" + hostName);
throw new RuntimeException(ex);
}catch(IOException ex){
System.err.println("I/O错误");
throw new RuntimeException(ex);
}
```
这段简单的例子说明了如何构建一个可以向本地运行的服务发送消息的应用程序[^2]。
#### 实现输入输出流读写功能
一旦建立了有效的套接字连接之后,就可以利用标准库中的IO组件来进行实际的数据交换工作了。下面给出了一段完整的聊天室样例片段,其中包括了从命令行接收用户输入的部分[^4]:
```java
BufferedReader stdIn =
new BufferedReader(new InputStreamReader(System.in));
PrintWriter out = null;
BufferedReader in = null;
out = new PrintWriter(clientSocket.getOutputStream(), true);
in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
String response = in.readLine();
if(response == null || "".equals(response.trim())) break;
System.out.println("收到回复:"+response);
}
```
此部分实现了双向的消息传递机制,允许双方互相收发字符串形式的内容直到任意一侧决定终止会话为止。
阅读全文