首页 新闻 会员 周边

关于TCP通讯,客户端向服务器发送数据

0
悬赏园豆:50 [待解决问题]

TCP客户端发送文本框里的内容到 服务器(esp8266无线模块)
代码是这样的,但为什么服务器那边收不到
不知道哪里出了问题,可以帮忙解答一下吗
public void Send_onClick(View v) {
try
{
outputStream = socket.getOutputStream();
outputStream.write(MsgEditText.getText().toString().getBytes());
//outputStream.write("0".getBytes());
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}

还有就是如果有几个文本框的内容要分别发送出去代码应该怎么写。

我是学电的,没学过代码,对这方面一窍不通,希望大神帮忙。

JUATHUA的主页 JUATHUA | 初学一级 | 园豆:152
提问于:2018-08-13 15:01
< >
分享
所有回答(2)
0

你用标准设备试一下不就知道代码是不是ok的了,然后再测试该设备。

花飘水流兮 | 园豆:13560 (专家六级) | 2018-08-13 19:39

设备已经测试过了,是正常的,所以问题应该是出在代码这里。

支持(0) 反对(0) JUATHUA | 园豆:152 (初学一级) | 2018-08-14 08:51

@JUATHUA: 

var client = new System.Net.Sockets.TcpClient();
    var host = "----{}----";
    client.Connect($"{host}", 80);
    //System.Text.Encoding.UTF8.GetBytes()
    var requestContent = new System.Text.StringBuilder();
    requestContent.Append("GET /api_1.0/user_trigger?opr=501&uid=223528450&token=eydQaWNVcmwnOiAnaHR0cDovLzEyMC43Ny4xNTcuMTQ0L2ltYWdlcy9hdmF0YXIucG5nJywgJ05hbWUnOiAn6ICB6JKLJywgJ1RlbCc6ICcxODUwMjMxOTgyMCcsICdzdGF0dXMnOiAnVVNFUl9TVEFUVVNfRU5BQkxFJywgJ0lkJzogMywgJ0N1cnJlbnRTeXNUaW1lJzogMTUzNDEzMTEyOSwgJ2V0JzogMTUzNDIxNzUyOX0%3d.eydiJzogJzQ0YjJlMWM4LTI4YWEtNDQ3Yy1hMjMxLTAwODlhZTdlYjE5ZScsICdhJzogJzcyNDg0NTc3LTA1ZjktNGVlNC1iYWQwLWI5MTVkNDcyNWU0OSd9.b883b3cfd56a10953b21e85537e92904 HTTP/1.1");
    requestContent.Append(Environment.NewLine);
    requestContent.Append("Accept: application/json, application/xml, text/json, text/x-json, text/javascript, text/xml");
    requestContent.Append(Environment.NewLine);
    requestContent.Append("User-Agent: Lance/tcp");
    requestContent.Append(Environment.NewLine);
    requestContent.Append($"Host: {host}");
    requestContent.Append(Environment.NewLine);
    requestContent.Append(Environment.NewLine);
    var buffer = System.Text.Encoding.UTF8.GetBytes(requestContent.ToString());
    client.GetStream().Write(buffer, 0, buffer.Length);
    using (var stream = client.GetStream())
    {
        var reader = new StreamReader(stream);
        Console.Write(reader.ReadToEnd());
    }
    client.Close();

代码很简单,给你个范例,一个测试脚本,肯定是对的,自己改host

支持(0) 反对(0) 花飘水流兮 | 园豆:13560 (专家六级) | 2018-08-14 10:00

@JUATHUA: 你这代码,咋java不像java,c#不像c#,更不想c或者c++写法。上面的是c#进一步封装了的,总而言之Client流程就是那么回事  Socket参数设置,连接,读写,关闭。

支持(0) 反对(0) 花飘水流兮 | 园豆:13560 (专家六级) | 2018-08-14 10:02

@花飘水流兮: 你给的那个代码android studio它有些东西识别不了会出错

支持(0) 反对(0) JUATHUA | 园豆:152 (初学一级) | 2018-08-14 10:42
0

flush 一下试试

outputStream.flush();
//outputStream.write("0".getBytes());
小创 | 园豆:209 (菜鸟二级) | 2018-08-13 21:45

这个方法之前试过了,不行,今天又试了还是不行

支持(0) 反对(0) JUATHUA | 园豆:152 (初学一级) | 2018-08-14 09:10

@JUATHUA: 既然服务端接收没问题,那可能就是发送的指令字符串格式有问题,百度简单了解了一下esp8266无线模块,发送字符串应该这样发送吧:

String str="abc";
send("AT+CIPSEND=3\r\n"); // 发送长度
sleep(1); // 休眠 不知道为啥 :)
send("abc\r\n"); // 发送内容
flush();

总之你得按照它指定的格式进行拼接字符串,不然服务端不识别,希望对你有帮助

支持(0) 反对(0) 小创 | 园豆:209 (菜鸟二级) | 2018-08-14 11:23

@wskwbog: 你好,你说的这个格式是用来设置esp8266的参数的指令,接收普通的字符串是它那边能显示,格式是+IPD,0,3:123

支持(0) 反对(0) JUATHUA | 园豆:152 (初学一级) | 2018-08-14 12:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册