Java 服务端和客户端的通信
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 服务端和客户端的通信相关的知识,希望对你有一定的参考价值。
服务端和客户端互发消息,互发文件。我在线程中用while(true)接收消息,文件的。然后各种情况,不是文件数据丢失,就是读取文件时阻塞,或者就是消息和文件的数据合在一起。求大佬帮帮忙,怎么解决消息和文件读取之间的冲突
有两种方法:
客户端和服务端创建两个连接,一个连接用于发消息,一个连接用于发文件。
客户端和服务端使用同一个连接,数据不要直接发出去,按照一定的格式制订一个协议,数据一块一块的发,每块前面加上块类型和长度,类型表明发送的是消息数据还是文件数据。
能给我讲讲第二种么,第一种大概都明白。这两种方法我也在网上看到过。第二种说的协议这种概念有点模糊。我的代码是这样的,以http80:开头的说明是消息,以http89:开头的说明是文件。这样虽然能解决文件和消息之间的冲突,但文件好像因为没有关闭流老是发生数据丢失,导致接受到的文件是损坏的
追答光加这个头是不行的,还要加一个发送的数据长度,不然你不知道发送的消息或者文件数据何时结束,这样消息和文件数据就会混一起。
追问大佬可以帮帮我嘛。我还是不行,今天又弄了一天。要崩溃了
参考技术A //客户端package 通讯;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
public class client
public static void main(String[] args)
try
Socket socket = new Socket("127.0.0.1", 8885);
while (true) //死循环重复步骤
OutputStream os = socket.getOutputStream();
PrintStream bw = new PrintStream(os);
Scanner input = new Scanner(System.in);
System.out.println("你想对对面的服务器说些什么");
bw.print(input.next());//从键盘输入读取一行 打印到输出流
bw.flush();
socket.shutdownOutput();
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String s;
while ((s = br.readLine()) != null)
System.out.println("服务器端说:" + s);
socket.shutdownInput();
br.close();
isr.close();
is.close();
bw.close();
os.close();
catch (IOException e)
e.printStackTrace();
怎么用SSH登陆OpenWrt,服务端和客户端的设置方法
参考技术A 公司有一台2017年的新路由3退役了,下放到我的手上,我又多了个新玩具。这货被攻城狮同事刷成了OpenWrt固件,不懂还想折腾就得去找教程。一看网上的教程大多都是以命令行操作的,命令行在哪里呢?
原来,OpenWrt的内核是Linux,原生版本是没有图形界面的,我手上这台路由器因为安装了LuCI所以才有图形界面。通过SSH登陆OpenWrt就能看得到命令行了。
记录一下怎么用SSH登陆OpenWrt,对服务端和客户端分别进行设置。
路由器刷好OpenWrt固件并安装LuCI
通畅的局域网
一台Mac或Windows电脑
OpenWrt版本:OpenWrt 19.07-SNAPSHOT / LuCI 18.06 Lienol (git-ed5893a)
电脑系统:Windows 10
路由器IP为默认,即192.168.1.1
用Wifi或网线接入路由器,打开网页浏览器访问路由器的IP。
登陆到路由器后台页面,在 系统 下拉菜单中点击 管理权 。
在管理权页面中进行以下设置:
PS:如果需要更高的安全性,建议设置密钥。用SSH客户端软件生成一对公钥和私钥,把公钥粘贴到下面的文本框里就行了。
最后点击 保存并应用 。
任意SSH客户端软件都可以,我用的是Xshell 6。
运行软件后点击 新建 ,在弹出窗口中填写:
名称随意,协议SSH,主机填路器IP地址,端口号填前面记下来那个。然后填写登陆用户名和密码:
照图填写,密码用路由器管理员密码即可。
PS:采用密钥验证的要在“方法”中选择Public key,“用户密钥”处选择之前生成的密钥对,“密码”填生成密钥时设置的密码。
设置完后点击连接。
出现LOGO和命令提示符,说明SSH登陆OpenWrt成功。
以上是关于Java 服务端和客户端的通信的主要内容,如果未能解决你的问题,请参考以下文章