java Socket
1 通过ping查看网络是否畅通,ping工作在TCP层,不能证明主机上是否开发某个端口。
查看机器中正在与哪些网络服务通信,使用netstat –an,由于只有TCP是面向协议的,因此只有TCP协议有状态说明。
2 创建简单服务器:
public class ChatServer {
public static void main(String[] args) {
// TODO Auto-generated method stub
ChatServer cs = new ChatServer();
cs.setUpServer(9090);
}private void setUpServer(int port) {
// TODO Auto-generated method stub
try {
ServerSocket server = new ServerSocket(port);
System.out.println("服务器创建成功!" + port);
while(true){//让服务器循环等待
Socket client = server.accept();
OutputStream out = client.getOutputStream();
InputStream ins = client.getInputStream();
String s = "你好,欢迎连接到服务器\r\n";
byte[] data = s.getBytes();
out.write(data);
out.flush();
int in=0;//一个字节一个字节地读取客户端输入
while(in!=13){//输入不是回车
in=ins.read();
System.out.println("读到的是:"+in);
}
System.out.println("客户按了回车,退出"+in);
client.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}
}
启动Telnet连接服务器:
3 接收客户端字符串,并返回响应
private void setUpServer(int port) {
// TODO Auto-generated method stub
try {
ServerSocket server = new ServerSocket(port);
System.out.println("服务器创建成功,等待连接......!" + port);
while (true) {// 让服务器循环等待
Socket client = server.accept();
System.out.println("Incoming Client"
+ client.getRemoteSocketAddress());
processChat(client);
}} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}
private void processChat(Socket client) throws IOException {
// TODO Auto-generated method stub
OutputStream out = client.getOutputStream();
InputStream ins = client.getInputStream();
String s = "你好,欢迎来到服务器!";
byte[] data = s.getBytes();
out.write(data);
out.flush();String inputS = readString(ins);
while (!inputS .endsWith("bye")) {
System.out.println("客户端说:" + inputS);
s = "服务器收到:" + inputS + "\r\n";
data = s.getBytes();
out.write(data);
out.flush();
inputS = readString(ins);
}
client.close();
}private String readString(InputStream ins) throws IOException {
// TODO Auto-generated method stub
StringBuffer sb = new StringBuffer();
char c = 0;
while (c != 13) {
int i = ins.read();
c = (char) i;
sb.append(c);
}
String inputS = sb.toString().trim();
return inputS;
}
4 多线程服务器端
private void setUpServer(int port) {
// TODO Auto-generated method stub
try {
ServerSocket server = new ServerSocket(port);
System.out.println("服务器创建成功,等待连接......!" + port);
while (true) {// 让服务器循环等待
Socket client=server.accept();
ServerThread st=new ServerThread(client);
st.start();
}} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}
ServerThread.java
public class ServerThread extends Thread{
Socket client;
public ServerThread(Socket sc){
this.client=sc;
}
public void run(){
try {
processChat(this.client);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void processChat(Socket client) throws IOException {
// TODO Auto-generated method stub
OutputStream out = client.getOutputStream();
InputStream ins = client.getInputStream();……
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端