GVKun编程网logo

从客户端(iOS和Android)向Sails.js服务器发送套接字请求(js向服务器发送数据)

27

在这里,我们将给大家分享关于从客户端(iOS和Android)向Sails.js服务器发送套接字请求的知识,让您更了解js向服务器发送数据的本质,同时也会涉及到如何更有效地AndroidSocket.

在这里,我们将给大家分享关于从客户端(iOS和Android)向Sails.js服务器发送套接字请求的知识,让您更了解js向服务器发送数据的本质,同时也会涉及到如何更有效地Android Socket.IO 实例无法向服务器发送数据、android – 如何向服务器发送HTTP POST请求请求、android-通过带回形针插件的Rails服务器通过Post方法上传图像、Android与websocket通信(Node Websocket服务器和Android Java客户端).不要在Android 4上工作的内容。

本文目录一览:

从客户端(iOS和Android)向Sails.js服务器发送套接字请求(js向服务器发送数据)

从客户端(iOS和Android)向Sails.js服务器发送套接字请求(js向服务器发送数据)

我正在尝试将socket.io与iOS和Android App一起使用,但这里存在一些问题.我在问是否有人确实有解决方案.

如何从客户端(iOS,Android)发送socket.io请求,我认为有iOS和Android的socket.io库,iOS lib有sendEvent / Message / JSON方法.但是,我找不到办法让帆船上的活动. https://github.com/pkyeck/socket.IO-objc https://github.com/koush/AndroidAsync
那么有什么方法可以从客户端发送socket.io事件?所以我可以像使用它一样

join: function (req, res) {
    sails.sockets.join(req.socket, req.param('room'));
    return res.ok();
  },

有什么方法可以让我知道当前套接字连接是来自客户端(ios / android)还是web前端?

onConnect: function(session, socket) {

    console.log(session);
    console.log(socket);

  },

当我用服务器连接套接字时,我需要url连接.我可以在网址上添加一些参数.有什么方法可以让我知道我用来连接服务器的参数是什么?

谢谢.

解决方法:

从iOS到Sails.js服务器(使用Socket.io)

SocketIO *socket;
Nsstring *url = [Nsstring stringWithFormat:@"/v1/controller/action?param1=%@&param2=%@", @"data1", @"data2"];
NSDictionary *params = @{@"url" : url};
[socket sendEvent:@"get" withData:data];

从Android到Sails.js服务器(使用AndroidAsync,感谢ArtworkAD)

JSONArray arr = new JSONArray();
JSONObject obj = new JSONObject();
obj.put("url", String.format("/v1/controller/action?param1=%s&param2=%s", "data1", "data2"));
arr.put(obj);
socketClient.emit("get", arr);

帆控制器

action: function(req, res) {
    var data1 = req.param('param1');
    var data2 = req.param('param2');
    sails.log.debug(req.socket);
    return res.ok();
}

Android Socket.IO 实例无法向服务器发送数据

Android Socket.IO 实例无法向服务器发送数据

如何解决Android Socket.IO 实例无法向服务器发送数据?

我正在尝试使用 socketio websocket 将简单数据发送到 socketio 服务器。 服务器工作正常。 问题: 没有任何回调做任何事情。 如果连接失败,其中一个回调应该在控制台中给我写一条消息。

已授予互联网权限。

这是我使用的依赖:

compile (''io.socket:socket.io-client:2.0.1'') {
        // excluding org.json which is provided by Android
        exclude group: ''org.json'',module: ''json''
    }

我的代码:

import android.util.Log;
import org.json.JSONObject;
import java.net.URI;
import io.socket.client.Ack;
import io.socket.client.IO;
import io.socket.client.socket;
import io.socket.emitter.Emitter;
import io.socket.engineio.client.transports.WebSocket;

public class MySocket {
    URI uri = URI.create("https://xxxx/socket.io");
    IO.Options options = IO.Options.builder()
            .setTransports(new String[]{WebSocket.NAME})
            .setUpgrade(true)
            .setRememberUpgrade(false)
            .setPath("/")
            .build();
    Socket socket;


    public MySocket() {
         socket = IO.socket(uri,options);
        socket.on("hello",new Emitter.Listener() {
            @Override
            public void call(Object... args) {
                System.out.println(args[0]); // world
            }
        });
        socket.on(Socket.EVENT_CONNECT,new Emitter.Listener() {
            @Override
            public void call(Object... args) {
                Log.d("ConenctioState",socket.connected()+"");
            }
        });

        socket.on("data",new Emitter.Listener() {
            @Override
            public void call(Object... args) {
                // ...
            }
        });
        socket.on(Socket.EVENT_CONNECT_ERROR,new Emitter.Listener() {
            @Override
            public void call(Object... args) {
                // options.auth.put("authorization","bearer 1234");
                Log.d("Connectionerror","call: ");
                socket.connect();
            }
        });
        socket.on(Socket.EVENT_disCONNECT,new Emitter.Listener() {
            @Override
            public void call(Object... args) {
                Log.d("Conenction","call: Connection dissconnected"); // null
            }
        });
    }

    public void sendData() {
        socket.emit("test","data",new Ack() {
            @Override
            public void call(Object... args) {
                JSONObject response = (JSONObject) args[0];
                Log.d("ack",response.toString());
            }
        });
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

android – 如何向服务器发送HTTP POST请求请求

android – 如何向服务器发送HTTP POST请求请求

您好我在点击显示日期选择器对话框和时间选择器对话框中使用两个按钮.
我有一个旋转器.

我想将用户输入值发送到PHP服务器.
我该怎么做客户端代码?

这是我的代码:

public class DineOutActivity extends Activity {

    private TextView mDatedisplay;
    private Button mPickDate;
    private int mYear;
    private int mMonth;
    private int mDay;
   /******************time picker**************/
        private TextView mTimedisplay;
           private Button mPickTime;
           private int mHour;
           private int mMinute;
           private int mAmPm;

           static final int TIME_DIALOG_ID=1;

        static final int DATE_DIALOG_ID = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        /********************spinner***********/

        Spinner food = (Spinner) findViewById(R.id.spinner1);
        ArrayAdapter<CharSequence> foodadapter = ArrayAdapter.createFromresource(
                    this,R.array.item_array,android.R.layout.simple_spinner_item);
        foodadapter.setDropDownViewResource(R.layout.spinner_layout);
        food.setAdapter(foodadapter);
        /**pick date*/

        mDatedisplay = (TextView) findViewById(R.id.textView2);
        mTimedisplay = (TextView) findViewById(R.id.textView4);
        mPickDate = (Button) findViewById(R.id.button2);
       /**pick time**/

        mPickTime=(Button)findViewById(R.id.button3);

        // add a click listener to the button
        mPickTime.setonClickListener(new View.OnClickListener() {

                     public void onClick(View v) {

                           showDialog(TIME_DIALOG_ID);
                     }
              });

        // get the current time
        final Calendar c=Calendar.getInstance();
        mHour=c.get(Calendar.HOUR_OF_DAY);
        mMinute=c.get(Calendar.MINUTE);
        mAmPm = c.get(Calendar.AM_PM);

        // display the current date
       upTimedisplay();


/*****************************pick date***********************************/
        // add a click listener to the button
        mPickDate.setonClickListener(new View.OnClickListener() {
            public void onClick(View v1) {
                showDialog(DATE_DIALOG_ID);
            }
        });

        // get the current date
        final Calendar date = Calendar.getInstance();
        mYear = date.get(Calendar.YEAR);
        mMonth = date.get(Calendar.MONTH);
        mDay = date.get(Calendar.DAY_OF_MONTH);
        int mdst = date.get(Calendar.AM_PM);
        int mAmPm = date.get(Calendar.DST_OFFSET);

        // display the current date (this method is below)
        updatedisplay();
    }

    // updates the date in the TextView




   private void upTimedisplay()
   {
     //  mTimedisplay.setText(new  
           //    StringBuilder().append(pad(mHour)).append(":").append(pad(mMinute)).append(pad(mAmPm)));
       mTimedisplay.setText(new  
                  StringBuilder().append(mHour).append(":").append(mMinute));
       mTimedisplay.setTextColor(R.color.green);
   }
  /** private Object pad(int mMinute2) {

       if(mMinute2>=10)
              return String.valueOf(mMinute2);
       else
              return "0"+String.valueOf(mMinute2);
}**/

   private TimePickerDialog.OnTimeSetListener mtimeSetListener=new  
           TimePickerDialog.OnTimeSetListener() {

public void onTimeSet(TimePicker view,int hourOfDay,int minute) {

mHour=hourOfDay;
mMinute=minute;
int ampm;

upTimedisplay();
}
};


    private void updatedisplay() {
        mDatedisplay.setText(new StringBuilder()
                    // Month is 0 based so add 1
                    .append(mMonth + 1).append("-")
                    .append(mDay).append("-")
                    .append(mYear).append(" "));
        mDatedisplay.setTextColor(R.color.green);
                 //   .append(mHour).append("_")
                  //  .append(mMinute).append("_")));
    }

    // the callback received when the user "sets" the date in the dialog
    private DatePickerDialog.OnDateSetListener mDateSetListener =
            new DatePickerDialog.OnDateSetListener() {

                public void onDateSet(DatePicker view,int year,int monthOfYear,int dayOfMonth) {
                    mYear = year;
                    mMonth = monthOfYear;
                    mDay = dayOfMonth;
                    updatedisplay();
                }
            };

    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case DATE_DIALOG_ID:
            return new DatePickerDialog(this,mDateSetListener,mYear,mMonth,mDay);

        case TIME_DIALOG_ID:
            return new TimePickerDialog(this,mtimeSetListener,mHour,mMinute,false);
        }
        return null;
    }

我使用mPickDate作为打开DatePickerDialog的按钮
mPickTime作为单击打开TimePicker对话框的按钮
一个Spinner(spinner1)获取项目列表.
mDatedisplay显示用户在单击DatePickerDialog后编辑的日期.
mTimedisplay显示用户在单击TimePickerDialog后编辑的时间.

我希望DatePickerDialog,TimePickerDialog和spinner的用户输入的字符串值作为HTTP post发送到服务器.请告诉我怎么做?我想要详细的代码.

解决方法

按照教程 here或 here进行操作,您可能希望通过 Android Developer HTTP Post

android-通过带回形针插件的Rails服务器通过Post方法上传图像

android-通过带回形针插件的Rails服务器通过Post方法上传图像

我有一个Rails应用,其控制器使用create方法调用matchs:

def create
@match = Match.new(params[:match])
respond_to do |format|
  if @match.save
    #do stuff here
  end
end

这是我的模特

class Match < ActiveRecord::Base
  attr_protected
  has_attached_file :pic, :styles => { :medium => "500x500>"}
end

我希望能够使用该Rails服务器,以便我的Android手机能够将图像上传到该服务器.我为此尝试了一些代码示例,但无法正常工作.

关于如何编写方法来执行post方法调用以上传图像的任何想法?

如果有什么资源可以帮助我,请您指导我吗?

*编辑***

这是我之前尝试过的代码

public void callPost()
{
    HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost("http://192.168.1.7:3000/matches");
    multipartentityBuilder build = multipartentityBuilder.create();
    File file = new File(Environment.getExternalStorageDirectory()
            .getAbsolutePath()+"/test.jpg");

    build.addPart("pic", new FileBody(file));

    httpentity ent = build.build();
    post.setEntity(ent);
    HttpResponse resp = null;
    try
    {
        resp = client.execute(post);
        httpentity resEnt = resp.getEntity();
        String result = EntityUtils.toString(resEnt);
        tv.setText(result);
    }
    catch(Exception e)
    {
        tv.setText("error");
        e.printstacktrace();
    }

}

这是我尝试测试是否可以使POST方法正常工作的代码.

这段代码将图像作为二进制数据流发送(我认为),因此我的服务器日志中出现此错误:

Parameters: {"match"=>{"pic"=>"\xFF\xD8\xFF\xE1a\xDFExif\u0000\u0000MM\u0000*\u0000\u0000\u0000\b\u0000\b\u0001\u000F\u0000\u0002\u0000\u0000\u0000\u0004LGE\u0000\u0001\u0010\u0000\u0002\u0000\u0000\u0000\b\u0000\u0000\u0000n\u0001\u001A\u0000\u0005\u0000\u0000\u0000\u0001\u0000\u0000\u0000v\u0001\e\u0000\u0005\u0000\u0000\u0000\u0001\u0000\u0000\u0000~\u0


//Tonnes more of this


\xE3?\x86+9l\r\xB4\x81o\"\xB6բ{\xD5+\u0003\xB1\u0001\x87+\x91\xF8t\xCF\xF5\xAB^ \xD0භ\x91\xE0\x84\xCD\f\xAD\x8D\xFB\xF8C\xD7\u0018\xFC\xEB6IR\xF2\xD7̒S\u001Eᔄ(\vK\xA5\x82\xE17yN\xA3\xEE\xF5\xE7\u07B4\xBC5%\x96\xAFnЉ\t\u000Ex|g\a\xE9\xFD>\xB5.\xB9\xA0\xE8\xDA%\xB0\xBF\x96\u0004\x9E\xE4.\u0016\xE0\f\x98c\xC8\xC9\xFA\u001Er}\xA9\x8A\xD7G\xFF\xD9"}}
Completed 500 Internal Server Error in 1ms

解决方法:

更改控制器中的代码

@match = Match.new(params[:match])

@match = Match.new(:pic => params[:pic])

这将破坏浏览器的兼容性,但是它将在移动客户端上运行.

为浏览器创建另一个控制器.

Android与websocket通信(Node Websocket服务器和Android Java客户端).不要在Android 4上工作

Android与websocket通信(Node Websocket服务器和Android Java客户端).不要在Android 4上工作

我试图用作 Android客户端Websocket – weberknecht,一个线程每秒向Nodejs Websocket发送一条消息(js): Node WebSocket Server

它在android 2或2.3.3上运行正常,但是当我在android 4上运行时,我在websocket.connect()上遇到错误;

你知道为什么或我做错了吗?

我的代码是:

public class MainThread extends Thread {

    private boolean is_running;
    private URI url = null;
    private de.roderick.weberknecht.WebSocket websocket = null;

    public MainThread() {
        this.is_running = false;
        try {
            url = new URI("ws://192.168.1.88:8088/");
            websocket = new WebSocketConnection(url);

            websocket.setEventHandler(new WebSocketEventHandler() {
                public void onopen(){
                    System.out.println("--open");
                }
                public void onMessage(WebSocketMessage message){
                    System.out.println("--received message: " + message.getText());
                }
                public void onClose(){
                    System.out.println("--close");
                }
            });
        } catch (WebSocketException wse) {
            wse.printstacktrace();  //To change body of catch statement use File | Settings | File Templates.
        } catch (URISyntaxException use) {
            use.printstacktrace();  //To change body of catch statement use File | Settings | File Templates.
        }

    }
    @Override
    public void run() {
        while(is_running){
            try {
                websocket.send("hello world");
                Thread.sleep(10000);
            }
            catch (WebSocketException wse) {
                wse.printstacktrace();
            } catch (InterruptedException e) {
                e.printstacktrace();  
            }

        }
    }

    public void set_running(boolean is_running) {
        if(is_running == true)
            try {
                websocket.connect();
                this.is_running = is_running;
            } catch (WebSocketException e) {
                System.out.println(e.toString());
                //e.printstacktrace();  
            }
    }
}

和我在android 4上得到的错误:

ERROR/AndroidRuntime(562): FATAL EXCEPTION: main
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.biskis.test.websocket/com.biskis.test.websocket.GameActivity}: android.os.networkonmainthreadException
        at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:1956)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
        at android.app.ActivityThread.access$600(ActivityThread.java:123)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4424)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
        at dalvik.system.NativeStart.main(Native Method)
        Caused by: android.os.networkonmainthreadException
        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
        at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
        at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
        at libcore.io.IoBridge.connect(IoBridge.java:112)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
        at java.net.socket.startupSocket(Socket.java:566)
        at java.net.socket.tryAllAddresses(Socket.java:127)
        at java.net.socket.<init>(Socket.java:177)
        at java.net.socket.<init>(Socket.java:149)
        at de.roderick.weberknecht.WebSocketConnection.createSocket(WebSocketConnection.java:238)
        at de.roderick.weberknecht.WebSocketConnection.connect(WebSocketConnection.java:83)
        at com.biskis.test.websocket.MainThread.set_running(MainThread.java:76)
        at com.biskis.test.websocket.GameActivity.onCreate(GameActivity.java:20)
        at android.app.Activity.performCreate(Activity.java:4465)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
        at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:1920)
        ... 11 more

或者您是否知道如何以更好的方式将客户端(java,android)通信到服务器(nodejs,websocket)?

谢谢.

解决方法

不要连接到主线程上的Websocket(即在GameActivity.onCreate中),错误就会消失.您可以使用AsyncTask在后台连接到Websocket.

通过I / O操作阻止主线程(并且网络访问最终是I / O操作)将导致(在最坏的情况下)缓慢的用户界面或Android杀死您的应用程序,因为它没有及时做出反应.请参阅designing for responsiveness文档.

关于从客户端(iOS和Android)向Sails.js服务器发送套接字请求js向服务器发送数据的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Android Socket.IO 实例无法向服务器发送数据、android – 如何向服务器发送HTTP POST请求请求、android-通过带回形针插件的Rails服务器通过Post方法上传图像、Android与websocket通信(Node Websocket服务器和Android Java客户端).不要在Android 4上工作等相关知识的信息别忘了在本站进行查找喔。

本文标签: