在这里,我们将给大家分享关于从客户端(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向服务器发送数据)
- Android Socket.IO 实例无法向服务器发送数据
- android – 如何向服务器发送HTTP POST请求请求
- android-通过带回形针插件的Rails服务器通过Post方法上传图像
- Android与websocket通信(Node Websocket服务器和Android Java客户端).不要在Android 4上工作
从客户端(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=%@¶m2=%@", @"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¶m2=%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 实例无法向服务器发送数据?
我正在尝试使用 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请求请求
我有一个旋转器.
我想将用户输入值发送到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发送到服务器.请告诉我怎么做?我想要详细的代码.
解决方法
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 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)?
谢谢.
解决方法
通过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上工作等相关知识的信息别忘了在本站进行查找喔。
本文标签: