1、创建服务器对象,并指定端口号;
ServerSocket server= new ServerSocket(9090);
等待客户端的连接服务器
Socket socket = server.accept();
2、发送和接收消息
获取输入输出流:
InputStream ins = socket.getInputStream();
OutputStream ous = socket.getOutputStream();
3、我们可以对代码进行封装:初始化服务器的函数、读取消息的函数、发送消息的函数
4、多客户端连服务器
在accept的外围添加一个循环,用于循环接收客户端的连接
获取连接后的逻辑代码,我们得用线程完成
三、服务器生猛上手源代码:
package com.huaxin.server;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class MyServer {
public static void main(String[] args) {
MyServer ms = new MyServer();
ms.initServer();
}
public void initServer() {
try {
// 构造一个服务器对象
ServerSocket server = new ServerSocket(9090);
System.out.println("服务器已经创建成功,等待客户端的链接.....");
while (true) {
// 获取客户端的链接:套接字,阻塞代码
final Socket socket = server.accept();
System.out.println("有客户端连上服务器!");
new Thread() {
public void run() {
try {
// 客户端连上服务器之后:发送消息和接收消息
// 获取输入流,用于读取消息
InputStream ins = socket.getInputStream();
// 获取输出流,用于发送消息
OutputStream ous = socket.getOutputStream();
/**发送消息 ***/
sendMsg(ous);
/**接收消息 **/
String msg = readMsg(ins);
while (!msg.equals("bye")) {
System.out.println(msg);
// 读取客户端发送过来的一条消息
msg = readMsg(ins);
}
// 关闭流和套接字和服务器
ous.close();
ins.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
};
}.start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 读取消息的函数
*/
public String readMsg(InputStream ins) throws Exception {
// 读取第一个字节
int value = ins.read();
String str = "";
// 循环读取字节内容
// 当客户端输入回车的时候,读取消息部分会读取到13(回车)和10(换行)两个字节
while (value != 10 && value != -1) {
// 拼接成一个字符串
str = str + (char) value;
value = ins.read();
}
// 处理掉字符串后面的回车
str = str.trim();
return str;
}
/**
* 发送消息的函数
*/
public void sendMsg(OutputStream ous) throws Exception {
// 开始发送消息
String msg = "welcome to our chating room !";
byte[] bytes = msg.getBytes();
ous.write(bytes);
ous.flush();
}
}
测试: win+r快捷键 在命令框中输入cmd 在黑色命令行中输入telnet localhost 9090启动系统自带的客户端
telnet 指连接到 ip地址为localhost (本机)端口号为9090的计算机上;连接到同一WiFi下的计算机只要知道服务器的ip地址到可以连接到该程序
一定要先开启服务器:
利用localhost连接到服务器:
查看本机ip地址:
连接成功!并发送消息(暂时只能发送英文)
利用ip地址加端口号连接服务器:
因为是用循环,所以服务器一直在等待接受客户端的连入,每连入一个,用一个独立的线程去跑
控制台显示客户端输入的信息:
客户端输入bye,断开和服务器的链接(不要点X按钮,会出现bug,这个问题到后面解决)
五、总结
通过对服务器的生猛上手,明白了一些简单的通信的原理和概念,学到了很多小知识;比如查看自己计算机的ip地址,开启系统自带的客户端等;同时,对Java如何创建服务器的过程有了详细的了解;
出现的问题:有时会连接不到服务器
可能原因:
0、没有启动telnet服务
1、服务器没有先开启
2、telnet 或者localhost英文单词或者ip地址或者输入错误
3、在输入telnet后就按下了回车键,
4、端口号没有输入
今天就分享到这里!共勉!