I'm trying to creating simple node.js server and android clients using sockets.
node.js server codes:
"use strict";
var http = require("http");
var server = http.createServer(processRequest).listen(3001, "192.168.1.4");
function processRequest(request, response) {
response.writeHead(200, {
"Content-Type": "text/html"
});
response.write("Simple HTML Page");
response.end();
}
// Buradan sonrası yeni
var io = require("socket.io").listen(server);
io.sockets.on('connection', function (socket) {
sendMessage(socket);
console.log("User Connected");
socket.on("disconnect", function () {
console.log("User Disconnected");
});
});
function sendMessage(socket) {
setTimeout(function () {
socket.emit("test", {
value1: "Aa",
value2: 49
});
sendMessage(socket);
}, 1000);
}
android client codes:
package com.example.mobi;
import io.socket.*;
import java.net.MalformedURLException;
import java.util.*;
import org.json.JSONException;
import org.json.JSONObject;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
public class MainActivity extends ActionBarActivity {
private TextView tView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tView = (TextView) findViewById(R.id.textView1);
tView.setText("Başlatılıyor");
runIO();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void runIO(){
try {
SocketIO socket = new SocketIO("http://192.168.1.4:3001");
socket.connect(new IOCallback() {
@Override
public void onMessage(JSONObject json, IOAcknowledge ack) {
try {
tView.setText("Server said:" + json.toString(2));
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onMessage(String data, IOAcknowledge ack) {
tView.setText("Server said: " + data);
}
@Override
public void onError(SocketIOException socketIOException) {
tView.setText("an Error occured");
socketIOException.printStackTrace();
}
@Override
public void onDisconnect() {
tView.setText("Connection terminated.");
}
@Override
public void onConnect() {
tView.setText("Connection established");
}
@Override
public void on(String event, IOAcknowledge ack, Object... args) {
tView.setText("Server triggered event '" + event + "'");
}
});
// This line is cached until the connection is establisched.
socket.send("Hello Server!");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
errors (logcat) :
09-08 09:33:52.670: W/System.err(1302): io.socket.SocketIOException: Error while handshaking 09-08 09:33:52.680: W/System.err(1302): at io.socket.IOConnection.handshake(IOConnection.java:322) 09-08 09:33:52.680: W/System.err(1302): at io.socket.IOConnection.access$600(IOConnection.java:39) 09-08 09:33:52.690: W/System.err(1302): at io.socket.IOConnection$ConnectThread.run(IOConnection.java:199) 09-08 09:33:52.690: W/System.err(1302): Caused by: java.net.SocketException: socket failed: EACCES (Permission denied) 09-08 09:33:52.710: W/System.err(1302): at libcore.io.IoBridge.socket(IoBridge.java:576) 09-08 09:33:52.710: W/System.err(1302): at java.net.PlainSocketImpl.create(PlainSocketImpl.java:201) 09-08 09:33:52.710: W/System.err(1302): at java.net.Socket.checkOpenAndCreate(Socket.java:663) 09-08 09:33:52.710: W/System.err(1302): at java.net.Socket.connect(Socket.java:807) 09-08 09:33:52.720: W/System.err(1302): at libcore.net.http.HttpConnection.(HttpConnection.java:76) 09-08 09:33:52.720: W/System.err(1302): at libcore.net.http.HttpConnection.(HttpConnection.java:50) 09-08 09:33:52.720: W/System.err(1302): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 09-08 09:33:52.720: W/System.err(1302): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 09-08 09:33:52.720: W/System.err(1302): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 09-08 09:33:52.720: W/System.err(1302): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316) 09-08 09:33:52.730: W/System.err(1302): at libcore.net.http.HttpEngine.connect(HttpEngine.java:311) 09-08 09:33:52.730: W/System.err(1302): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290) 09-08 09:33:52.730: W/System.err(1302): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240) 09-08 09:33:52.730: W/System.err(1302): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:282) 09-08 09:33:52.740: W/System.err(1302): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177) 09-08 09:33:52.740: W/System.err(1302): at io.socket.IOConnection.handshake(IOConnection.java:313) 09-08 09:33:52.740: W/System.err(1302): ... 2 more 09-08 09:33:52.740: W/System.err(1302): Caused by: libcore.io.ErrnoException: socket failed: EACCES (Permission denied) 09-08 09:33:52.750: W/System.err(1302): at libcore.io.Posix.socket(Native Method) 09-08 09:33:52.750: W/System.err(1302): at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:181) 09-08 09:33:52.760: W/System.err(1302): at libcore.io.IoBridge.socket(IoBridge.java:561) 09-08 09:33:52.760: W/System.err(1302): ... 17 more