收藏
回答

想做个前端后端联动的,怎么都调不通,求解答

前端微信代码如下:

wxml

<button type='default' bindtap='createConn'>创建连接</button>
<view style='display:flex;flex-direction:row;margin:10px'>
<input type='txet' name='msg' bindblur='getMsg' style='width:200px;border:1px solid #cccccc'></input>
<button type='primary' size='mini' bindtap='send'>发送消息</button>
</view>
<view style='height:200px;'>
<view style='font-weight:bold'>客户端发送的消息:</view>
<block wx:for='{{sendMsg}}' wx:for-item='item1'>
<view style='color:green'>{{item1}}</view>
</block>
</view>
<view style='height:200px'>
<view style='font-weight:bold'>服务器返回消息</view>
<block wx:for='{{restData}}' wx:for-item='item2'>
<view style='color:red'>{{item2}}</view>
</block>
</view>
<view style='margin:10px'>{{content}}</view>
<button type='default' bindtap='closeConn'>关闭连接</button>

js

Page({
  data: {
  },
  createConn:function(){
    var page=this;
    wx.connectSocket({
      url: '192.168.31.233:7788',
      data:{
        x:'',
        y:''
      },
      header:{
        'content-type':'Application/json'
      },
      method:'GET'
    });
    wx.onSocketOpen(function(res){
      console.log(res);
      page.setData({socketOpen:true});
      console.log('WebSocket连接已打开!')
    });
    wx.onSocketError(function(res){
      console.log('WebSocket连接打开失败,请检查!')
    })
  },
  send:function(e){
    if(this.data.socketOpen){
      console.log(this.data.socketOpen);
      wx.sendSocketMessage({
        data: this.data.msg
      });
      var sendMsg=this.data.sendMsg;
      sendMsg.push(this.data.msg);
      this.setData({sendMsg:sendMsg});
      var page=this;
      wx.onSocketMessage(function(res){
        var resData=page.data.resData;
        resData.push(res.data);
        page.setData({resData:resData});
        console.log(resData);
        console.log('收到服务器内容:'+res.data)
      })
    }else{
      console.log('WebSocket连接打开失败,请检查!');
    }
  },
  closeConn:function(e){
    wx.closeSocketClose(function(res){
      console.log('WebSocket已关闭!')
    });
  },
  getMsg:function(e){
    var page=this;
    page.setData({msg:e.detail.value});
  }
})

显示界面如下


报错如下:


用JAVA代码互操作可以实现相互通信:


java服务器代码如下:

import java.io.*;
import java.net.*;
public class Example06
{
    public static void main(String[] args)throws Exception
    {
        new TCPServer().listen();
    }
}
class TCPServer
{
    private static final int PORT=7788;//定义一个静态常量作为端口号
    public void listen()throws Exception
    {
        //创建ServerSocket对象,监听指定的端口
        ServerSocket serverSocket=new ServerSocket(PORT);
        //使用while循环不停的接收客户端发送的请求
        while(true)
        {
            //调用ServerSocket的accept()方法与客户端建立连接
            final Socket client=serverSocket.accept();
            //下面的代码用来开启一个新的线程
            new Thread()
            {
                public void run()
                {
                    OutputStream os;//定义一个输出流对象
                    try
                    {
                        os=client.getOutputStream();//获取客户端的输出流
                        System.out.println("开始与客户端交互数据");
                        os.write(("传智播客欢迎你!").getBytes());
                        Thread.sleep(5000);//使线程休眠5000毫秒
                        System.out.println("结束与客户端的交互数据");
                        os.close();//关闭输出流
                        client.close();//关闭Socket对象
                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                }
            }.start();
        }
    }
}

java客户端代码如下:

import java.io.*;
import java.net.*;
public class Example05
{
    public static void main(String[] args)throws Exception
    {
        new TCPClient().connect();//创建TCPClient对象,并调用connect()方法
    }
}
//TCP客户端
class TCPClient
{
    private static final int PORT=7788;//服务端的端口号
    public void connect()throws Exception
    {
        //创建一个Socket并连接到给出地址和端口号的计算机
        Socket client=new Socket("192.168.31.233",PORT);
        InputStream is=client.getInputStream(); //得到接收数据的流
        byte[] buf=new byte[1024];//定义1024个字节数组的缓冲区
        int len=is.read(buf);//将数据读到缓冲区
        System.out.println(new String(buf,0,len));//将缓冲区的数据输出
        OutputStream os=client.getOutputStream();
        os.write(("客户端发送消息给服务器").getBytes());
        os.close();
        is.close();
        client.close();//关闭Socket对象,释放资源
    }
}

请问各位,为什么java之间可以正常通信,微信无法连接上呢?

回答关注问题邀请回答
收藏

3 个回答

  • zzy
    zzy
    2018-12-12

    微信客户端走的websocket协议,服务器只是简单的tcp数据流传输,协议不匹配

    2018-12-12
    赞同
    回复
  • 小娇
    小娇
    2018-11-06

    遇到同样的需求,楼主这个问题解决了吗?

    2018-11-06
    赞同
    回复 4
    • 剑峰
      剑峰
      2018-11-07

      还没有,现在在学习java web程序入门,应该是通信协议不同的原因

      2018-11-07
      回复
    • 小娇
      小娇
      2018-11-07回复剑峰

      刚接触小程序,也不懂。谢谢回复^^

      2018-11-07
      回复
    • 剑峰
      剑峰
      2018-11-07回复小娇

      哦,你以前做前端的么?

      2018-11-07
      回复
    • 小娇
      小娇
      2018-11-07回复剑峰

      对android熟一点,我的需求是通过小程序与android端的APP在局域网内进行通信。

      2018-11-07
      回复
  • 剑峰
    剑峰
    2018-11-01

    知道的大侠们指点一下,跪谢

    2018-11-01
    赞同
    回复 1
    • 剑峰
      剑峰
      2018-11-02

      再顶一下

      2018-11-02
      回复
登录 后发表内容