java Socket客户端实时接受信息回显页面
你可以用推技术,把数据发送到页面,也可以用WebSocket // 建立WebSocket连接 var strWSPath =”ws://”+wsPath; if (‘WebSocket’ in window){ objWebSocket = new WebSocket(strWSPath+”/mywebsocket.do”); }else if (‘MozWebSocket’ in window){ objWebSocket = new MozWebSocket(strWSPath+”/mywebsocket.do”); }else{ alert(“对不起!你的浏览器不支持WebSocket!”); } // 收到消息 objWebSocket.onmessage = function(evt) { // 解析数据 var objJsonData = JSON.parse(evt.data); var strMethodName = objJsonData.method; var objData = objJsonData.data; // 执行相应的业务逻辑 window[strMethodName](objData); };
java socket服务器接收客户端信息问题
先把你的业务代码注释掉,直接打印接收到的数据看看,有没有可能是客户端两次的数据合并了,还有可能是业务代码太慢,导致第三次把第二次的给覆盖了,第四次的被第五次的给覆盖了。
java服务器端用传输给客户端文件流(fileinputstream),客户端应该如何接收?(socket )
其实这个问题你应该先想一下socket到底是一个什么东西,在网络编程中socket到底用来做什么的。socket:在操作系统内核中它代表网络连接的一个端点(endpoint),在应用程序中它代表一个打开的文件。socket pair唯一确定的一条网络连接,socket pair就是客户端socket和服务端socket的一个组合。也就是客户端ip和port与服务端ip和port的组合。一条网络连接也就是一条通信的信道,tcp连接代表的信道是全双工的。以信道来讲,逻辑上就存在两个管道来代表输出与输入来发送和接收信息。
那么在应用程序上我们就可以拿到这2个管道来完成socket之间的通信。
以你的应用来看输出流fos就代表着图中的红色管道,那么在服务端就应该是这个样的。
Scoket connSock = serverSocket.accept();//connSock代表着服务端的Socket
InputStream is = connSock.getInputStream();//输入流is代表图中的红色管道
OutputStrea os = connSock.getOutputStream();//输出流os代表图中的绿色管道
在服务端有一个字节缓冲区来存放从is读取的字节数据
byte[] buffer = new byte[1024];
然后服务端读取数据来填充这个字节缓冲区
is.read(buffer);//比如这样
然后就根据你的需求来操作这个buffer了。
然后把处理过后的数据通过os发送给客户端。os就是图中的那个绿色管道
os.write(处理过后的数据);
java的serversocket怎么接受来自客户端的数据
通过accept()获取Socket,然后获取IO流,这个是我写的从客户端下载文件的客户端代码,代码如下
ServerSocket serverSocket = new ServerSocket(10002);
while(true){
Socket socket = serverSocket.accept();
OutputStream Output = socket.getOutputStream();
FileInputStream input= new FileInputStream(“F:\\Play.mp4”);
byte[] buf = new byte[1024];
int length = 0;
while((length = input.read(buf))!=-1){
Output.write(buf, 0, length);
}
String ip = socket.getInetAddress().getHostAddress();
System.out.println(ip);
input.close();
socket.close();
}
java socket客户端接收不到大的数据
每个数据包有大小限制,大的数据会被强制拆分成小的数据包,造成你的数据不完整,造成客户端无法接收。
解决的话,需要把你要传的大数据先拆分成一个一个的小数据包,然后客户端接收到后,把这些小数据包再根据报文协议逐个拼成一个完整的大数据。
java socket 多人单对单聊天 客户端的接受问题
我也写过这样的程序,你的意思是只用一个socket然后让他接受信息吧,这样当然不行,既然有单对单的聊天,那么当客户A同时跟客户B客户C聊天的时候会使用到多个socket的.
我当时用的方法是用一个线程来监听来自其他客户的聊天请求的连接,当他接收到聊天请求的时候将socket直接传递给客户聊天线程ServerHold类来处理聊天事件,自己继续等待客户的连接.在程序中用一个Clent类来管理其他用户的信息 比如Clent有一个属性就是ServerHold类的实例
class Clent{
……
public ServerHold sh;
……
}
然后用一个ClentHost类
class ClentHost{
static Clent[] cs = new Clent[10];
public add(Clent clent){}
public del(Clent clent){}
public get(String name){}
}的实例来管理所有的Clent客户类
大体实例是:
class ServerWating extends Thread{
ServerSocket server;
Socket socket;
public ServerWating(){
try{
//监听端口
server = new ServerSocket(12345);
}catch(Exception e){
e.printStackTrace(System.out);
System.out.println(“对不起,监听线程出错”);
System.exit(0);
}
}
public void run(){
while(true){
try{
//等待用户连接
socket = server.accept();
//连接上后 将所得的socket 传递给ServerHold线程类并实例化 具体ServerHold类的参数你可以自己根据需求来写
ServerHold sh = new ServerHold(socket);
//启动该ServerHold线程
sh.start();
}catch(Exception e){
e.printStackTrace(System.out);
System.out.println(“对不起,监听线程出错”);
}
}
}
}
然后是与用户交互的类 ServerHold
class ServerHold extends Thread{
Socket socket;
public ServerHold(Socket socket){
this.socket = socket;
}
//用线程不停的读取对方发来的信息,避免信息的阻塞
public void run(){
try{
//根据socket新建输入流
while(true){
//读取对方发送的信息并从中获取对方的姓名,根据情况,或新建Clent然后将this(ServerHold类的本对象)添加到Clent或直接添加到已有的Clent
//读取对方发送的信息并反馈到程序
}
}catch(Exception e){
//当对方下线会出现错误时保证线程安全退出
}
}
//发送信息到对方,可以根据实际情况来确定方法的参数等内容,然后根据程序的需要直接调用
//在连接建立的时候,要发送一次自己的客户端信息,比如name什么的到对方以便其保存.
public void set(){
//根据socket取得输出流
}
}
当然,上面都是被动连接的,主动连接差不多,也是要根据连接后的socket来新建一个ServerHold类然后进行交互.
大体思想就是这样子的,当然 实现的时候会有好多困难,449775695我的QQ,有什么问题可以来问我.