我有一个节点。js服务器使用socket。io和Android应用程序。我希望我的应用程序连接到服务器。(我在当地工作)
首先我启动服务器:命令提示符
以下是代码:
var express = require('express'); // call express
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var port = process.env.PORT || 1234;
app.get('/',function(req,res){
res.send("Welcome to my socket");
});
io.on('connection', function (socket) {
console.log('one user connected : '+socket.id);
// when the client emits 'new message', this listens and executes
socket.on('new message', function (data) {
// we tell the client to execute 'new message'
console.log('this is message :',data);
});
});
http.listen(port, function () {
console.log('Server listening at port %d', port);
});
然后我试着从这里的活动中联系起来:
public class AvisActivity extends AppCompatActivity {
private Socket mSocket;
{
try {
mSocket = IO.socket("http://172.21.191.234:1234");
} catch (URISyntaxException e) { Log.v("AvisActivity", "error connecting to socket");}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_avis);
Log.v("AvisActivity", "try to connect");
mSocket.connect();
Log.v("AvisActivity", "connection sucessful");
}
}
我的问题是,我从来没有在服务器上看到“一个用户连接”的日志,但我总是在android日志上看到“尝试连接”和“连接成功”。
有人能帮我解开这个谜团吗?
使现代化
我的代码工作正常,但我遇到了一些WiFi配置,阻止网络插座(实际上我的学校做到了,这就是我的问题的来源)
对于在这里搜索的其他人来说,这帮助我获得了一些关于这个问题的日志信息:
Log.v("AvisActivity", "try to connect");
mSocket.connect();
mSocket.io().on(Manager.EVENT_TRANSPORT, new Emitter.Listener() {
@Override
public void call(Object... args) {
Transport transport = (Transport) args[0];
transport.on(Transport.EVENT_ERROR, new Emitter.Listener() {
@Override
public void call(Object... args) {
Exception e = (Exception) args[0];
Log.e(TAG, "Transport error " + e);
e.printStackTrace();
e.getCause().printStackTrace();
}
});
}
});
对我来说,问题是客户机不会使用TLSv1。1或1.2。在写这篇文章时,我还没有弄明白。让我的服务器支持TLSv1。0是我当前的解决方法。
对于API 23及更高版本,您必须在清单文件中添加android:usesCleartextTraffic=“true”
。
在Android的最新版本中,您需要添加Androidanifest.xml"android: usesCleartext交通=true",以允许纯文本连接。
例子:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true">
Android开发者
背景我正试图为我的java服务器创建一个android客户端应用程序,并让它们使用TCP套接字进行通信。 当我在android设备模拟器上运行我的应用程序时,它的工作原理是什么 当我在手机上运行该应用程序时,我无法正常工作,我在创建套接字时遇到连接超时。 异常 java.net.Connect异常: 无法连接到 /10.0.2.2 (端口 9111): 连接失败: ETIMEDOUT (连接超时)
我有nodejsexpress项目。我正在实现套接字。io用于聊天应用程序。要检查Socket连接,我正在使用此工具。https://amritb.github.io/socketio-client-tool/ 这是我的服务器代码。 我使用上述工具检查了连接。像 http://localhost:3000,并连接插座。但是当我在服务器中检查它时,它不起作用。 我在服务器中使用ngnix服务器并映射
我在我的电脑上开发了一个带有python的HIDServer(蓝牙键盘)。有2个服务器套接字(psm 0x11和0x13)正在侦听连接。当我尝试将IPhone连接到计算机时,我收到了一个传入连接(如hcidump中所示),但不知何故,连接被远程主机终止。我的套接字永远无法接受客户端连接。你能帮帮我吗? hciDumps: 启动我的程序后: HCI事件:命令完成(0x0e)plen 4写入扩展查询响
我正在开发一个单例BluetoothHelper类。在connectToBTDevice()方法中,调用了一个新线程,在该线程中,蓝牙套接字试图连接到蓝牙设备。不幸的是,它开始时很好,但退出时有一个警告系统。错误如下: BluetoothHelper.java onnectToBTDevice(BluetoothDevice device)方法位于第234行。BluetoothSocket con
我正在努力正确配置nginx,以确保它可以处理Express(端口8081)和Socket的代理。io(端口3000)。下面是我的配置,它当前为整个请求(不仅仅是Socket.io)产生了502错误: 据我所知,我需要确保Socket使用的Websocket。io已升级到HTTP,但这正是我努力掌握自己需要做什么的地方。可能是两个插座。io和Express需要在不同的端口上运行,然后需要根据我上面
有没有办法设置(即减少)套接字的轮询频率。使用长轮询传输时的IO (v4.4)?在服务器上还是在客户机上? 文档中描述了长轮询传输,通常在无法建立 WebSocket 连接时充当回退(但可以显式设置): 套接字之间的双向通道。IO服务器(Node.js)和套接字。IO客户端(browser、Node.js或其他编程语言)尽可能使用WebSocket连接建立,并将使用HTTP长轮询作为后备。