Java通信项目1
准备工作
控制面板 — 程序 — 启动或关闭windows功能 — 勾选Telnet客户端
命令行 查看本地IP地址、启动Telnet客户端
ipconfig 查看本机的IP地址
telnet IP地址 端口:请求连接的 目标主机 和 对应的端口号
ping IP地址 :检查与目标主机间的网络连接情况
telnet localhost 端口 请求连接本地的服务器 和对应端口
ServerSocket 、 Socket的用法
简单讲一下这2个类的用法,具体的底层原理可以看TCP/IP 协议
简单理解
IP 就是 计算机在网络中的地址
port 端口号 是连接每个程序的入口
IP +Port 可以找到 哪台计算机 的 哪个程序 在调用服务器
这两个类 就是 ip +port 的封装,方便服务器和客户端的连接
ServerSocket (服务器套接字)
服务器端需要创建监听特定端口的ServerSocket
ServerSocket:接收客户端的连接请求,并做出相应的反馈
Socket (客户端套接字)
每多一个 客户端的链接,那就要多一个Socket套接字
Socket 就是ip+port封装,作为一个方法供实例调用
程序可以用IP+端口号进行唯一标识。这个程序的入口就被称作Socket
** 输入输出流**
对不用的对象(服务器、客户端),输入输出流的定义不一样,
比如客户端的输入流,可能是服务器的输出流
public class Mysever {
public void createSever(int port)throws Exception{
ServerSocket serverSocket =new ServerSocket(port);
System.out.println("服务器在监听 "+port +"端口\n");
//阻塞监听 连接次服务器的客户端
Socket socket = serverSocket.accept();
//Sever发送给客户端的信息 输出流
OutputStream os = socket.getOutputStream();
//客户端发送信息 Sever 输入流
InputStream is =socket.getInputStream();
String send_message = "client connects Sever \n\r";
byte[] message_bytes =send_message.getBytes();
// 因为是使用的字符流,所以要把string 转化为 byte 数组 byte是基本数据类型
// Byte是java中 byte的封装类 Integer 和int
os.write(message_bytes); //写入通道 Sever发送给 客户端的信息
System.out.println("客户端发送信息成功");
while (true){
//得到客户端发送的信息
StringBuffer stringBuffer =new StringBuffer();
int c =0;
while ( c != 13){ //回车的Ask ii码是13, 回车表示客户端发送信息的结束
c =is.read();
stringBuffer.append((char) c);
}
System.out.println("client send:" +stringBuffer);
String next = "please type next message\n\r";
os.write( next.getBytes());
}// 不停地发送接受信息
}
public static void main(String[] args) throws Exception {
new Mysever().createSever(9999);
}
}
具体操作步骤
首先打开 java程序, 服务器开始监听端口
用命令行 telnet localhost 端口 连接本地服务器
客户端连接服务器
这样服务端和客户端就可以开始通信了右边 客户端 不断发送消息到 服务器
左边 服务器 接受 客户端的消息
持续向管道写入 please type next message