# 听
**TCP 监听。新连接触发回调。**
**签名**:`听(端口, 处理函)` 或 `听(端口, 处理函, 绑定地址)`
- **默认只绑回环 `127.0.0.1`**——只允许本机连接。要让局域网/公网访问,必须显式写地址:`听(8000, 处理函, "0.0.0.0")`。
- 绑定地址是字符串:IPv4 字面量(`"127.0.0.1"` / `"0.0.0.0"` / `"192.168.1.10"`)或可解析的主机名。
- 地址不可用(端口被占、地址非法、传了非字符串)时 `听` 返回**失败结果**,错误消息带具体地址与端口;**绝不会静默回退成对外监听**。
- 参数个数不是 2 或 3 时**编译期报错**。
```xuantie
听(8000, 函(流) {
流.写("欢迎!\n")
})
输("按回车停止...")
```
上面这段只监听本机。要对外提供服务,写成 `听(8000, 函(流) { ... }, "0.0.0.0")`。
## 你可以……
- **回显服务器**——回调参数就是该连接的流:
```xuantie
听(8000, 函(流) {
循 {
设 数据 = 流.读()
若 数据 == 空 { 断 }
流.写("回显: " & 数据)
}
流.关()
})
输("按回车停止...")
```
- **共享数据**——回调间是真多线程并发,用全局变量或通道汇总:
```xuantie
设 在线 = 0
听(8000, 函(流) {
在线 = 在线 + 1
流.写("当前在线: " & 在线)
在线 = 在线 - 1
流.关()
})
输("按回车停止...")
```
## 注意
- `听` 立即返回、不挡退出:主线程跑到末尾进程就结束了,服务端末尾用 `输(...)` 或 `循 { 时.睡(1000) }` 留住主线程。
- 没有「停止监听」原语:一旦启动就活到进程结束。
- TCP 没有消息边界:一次 `读` 不等于「一条消息」(阻塞路径每次最多 4096 字节),要完整消息自己加分隔符循环拼。
## 相关
[连](连.md) · [求](求.md) · [异步](异步.md)