当前位置:首页 » 安卓系统 » android的socket通信

android的socket通信

发布时间: 2022-09-02 22:49:53

❶ 如何用socket实现android手机与手机之间的通信

有两种方案: 1、在PC机上建立服务器,手机与手机之间的通信通过服务器进行中转 2、一部手机作为服务器,另一部手机作为客户端接入该手机 一般是第一种方案 示例代码: 1、pc端: serverSocket=new ServerSocket(5648); //在5648端口进行侦听 Socket sk = serverSocket",5648);//连接socket 3、消息输入输出: pw=new PrintWriter(socket.getOutputStream()); //消息输出 pw.println("发送消息"); pw.flush(); br=new BufferedReader(new InputStreamReader(socket.getInputStream())); //消息接收 while((str=br.readLine())!=null){ //接收消息 }

❷ Android socket通信协议的封装和解析

android socket通信协议的封装和解析,其实是和java一样的,都是通过http中的相关知识来封装和解析,主要是通过多次握手,如下代码:

importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.io.OutputStreamWriter;
importjava.io.PrintWriter;
importjava.net.ServerSocket;
importjava.net.Socket;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.concurrent.ExecutorService;
importjava.util.concurrent.Executors;


publicclassMain{
privatestaticfinalintPORT=9999;
privateList<Socket>mList=newArrayList<Socket>();
privateServerSocketserver=null;
=null;//threadpool

publicstaticvoidmain(String[]args){
newMain();
}
publicMain(){
try{
server=newServerSocket(PORT);
mExecutorService=Executors.newCachedThreadPool();//createathreadpool
System.out.println("服务器已启动...");
Socketclient=null;
while(true){
client=server.accept();
//把客户端放入客户端集合中
mList.add(client);
mExecutorService.execute(newService(client));//
}
}catch(Exceptione){
e.printStackTrace();
}
}
{
privateSocketsocket;
privateBufferedReaderin=null;
privateStringmsg="";

publicService(Socketsocket){
this.socket=socket;
try{
in=newBufferedReader(newInputStreamReader(socket.getInputStream()));
//客户端只要一连到服务器,便向客户端发送下面的信息。
msg="服务器地址:"+this.socket.getInetAddress()+"cometoal:"
+mList.size()+"(服务器发送)";
this.sendmsg();
}catch(IOExceptione){
e.printStackTrace();
}

}

@Override
publicvoidrun(){
try{
while(true){
if((msg=in.readLine())!=null){
//当客户端发送的信息为:exit时,关闭连接
if(msg.equals("exit")){
System.out.println("ssssssss");
mList.remove(socket);
in.close();
msg="user:"+socket.getInetAddress()
+"exittotal:"+mList.size();
socket.close();
this.sendmsg();
break;
//接收客户端发过来的信息msg,然后发送给客户端。
}else{
msg=socket.getInetAddress()+":"+msg+"(服务器发送)";
this.sendmsg();
}
}
}
}catch(Exceptione){
e.printStackTrace();
}
}
/**
*循环遍历客户端集合,给每个客户端都发送信息。
*/
publicvoidsendmsg(){
System.out.println(msg);
intnum=mList.size();
for(intindex=0;index<num;index++){
SocketmSocket=mList.get(index);
PrintWriterpout=null;
try{
pout=newPrintWriter(newBufferedWriter(
newOutputStreamWriter(mSocket.getOutputStream())),true);
pout.println(msg);
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
}

❸ android与linux通信socket报错opensslprovider

android与linux通信socket报错opensslprovider如下
问题描述:Android 端作为 Socket 服务端,Linux 端作为 Client 端,Android 端给 Linux 端Android 侧发送数据代码:public void sendMessage(final String msg){Log.d(TAG, "即将发送的数据 "+msg);// 发送的数据为 {"info":"The gps switch is not on","status":"Failed"} new Thread(new Runnable() {@Overridepublic void run() {if(outputStream!=null){ 但是对方收到的数据为:7{“info”:“The gps switch is not on”,“status”:“Failed”}首部都会莫名奇妙的出现一个数字或者冒号;出现原因:编码问题,我Android 端发送编码为 UTF-8writer.writeUTF(msg); // 写一个UTF-8的信息所以换成其它方式发送writer.writeBytes(msg)。

❹ 手机作为客户端,电脑作为服务器进行android socket通信

1.PC服务器启用ServerSocket两个通信实体在建立虚拟链路之前,需要有一方先准备好,主动接受来自其他通信实体的连接请求。使用ServerSocket对象监听来自客户端的Socket连接。//创建ServerSocket对象ServerSocketss=newServerSocket(30000);//监听来自客户端的请求while(true){Sockets=ss.accept();…}如果没有连接,则将一直处于等待状态。当接收到连接请求后,获取消息到输入流,并保存到文件。//接收客户端消息BufferedReaderin=newBufferedReader(newInputStreamReader(client.getInputStream()));Stringstr;BufferedWriterbw=newBufferedWriter(newFileWriter("D:/ApInfo"+(i++)+".txt"));while((str=in.readLine())!=null){System.out.println(str);bw.write(str);bw.newLine();}2.Android终端使用Socket通信客户端使用Socket的构造器连接服务器,指定服务器IP和端口号就可以了。Sockets=newSocket(“192.168.1.100”,30000);这样服务器端的accept()方法就得到响应,从而向下执行,服务器端和客户端就形成了一对互相连接的Socket。再进行通信时就没有服务器和客户端之分了,都是通过输入输出流进行通信。详细步骤:采用Handler和TimerTask来定时扫描AP信息并发送给服务器端。TimerTask规定了到达指定的时间所要进行的任务。TimerTasktask=newTimerTask(){publicvoidrun(){Messagemessage=newMessage();message.what=1;handler.sendMessage(message);}};handler传递message内容:Handlerhandler=newHandler(){publicvoidhandleMessage(Messagemsg){switch(msg.what){case1://执行定时器时间到了之后由handler传递的任务break;}super.handleMessage(msg);}}接下来扫描AP信息并发送给服务器端,然后将结果保存。WifiManagerwifiManager=(WifiManager)getSystemService(WIFI_SERVICE);wifiManager.startScan();mWifiList=wifiManager.getScanResults();由WifiManager说明可知,它可以用于处理已配置的网络,当前连接的网络及AP信息的扫描等情况。向服务器发送消息:socket=newSocket("192.168.1.211",30000);//向服务器端发送消息PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true);out.println(message);其中message为获取的AP信息,测试收到的信息格式为:SSID:ICIS_LAB,BSSID:1c:af:f7:9a:65:e4,capabilities:[WPA-PSK-TKIP+CCMP],level:-80,frequency:2437

❺ android作为客户端的socket通信,怎样判断超时

try{ SocketAddress socAddress = new InetSocketAddress(SERVERIP, SERVERPORT); socketconnect(socAddress, 5000); } catch (SocketTimeoutException se){ //超时 } }catch (SocketException se){ //中断连接 }android作为客户端的socket通信,怎样判断超时?

❻ andoid的socket测试出现这个错误是什么原因

语法写错了。

❼ 如何干净的实现Android/Java Socket 长连接通信

在远标实现过:socket模拟网页的报文连接某个网站,创建tcp的socket后,当我socket.connect后,如果在5到7秒钟不socket.send,那么这个链接就失效了。 请问如何长时间的保持这个链接
这是在服务器端的设置的,客户端没法设置,可以发送心跳包。
socket.connect后,每3-4秒用socket.send发送一字节数据(内容随便),然后观查这个连接是否保持。

lientSocket=serverSocket.accept();
OutputStream os = clientSocket.getOutputStream();
ObjectOutputStream oos=new ObjectOutputStream(os);
oos.writeObject(al);
oos.flush();
oos.close()//socket会关闭

实现:
长连接的维持,是要客户端程序,定时向服务端程序,发送一个维持连接包的。
如果,长时间未发送维持连接包,服务端程序将断开连接。

客户端:
通过持有Client对象,可以随时(使用sendObject方法)发送Object给服务端。
如果keepAliveDelay毫秒(程序中是2秒)内未发送任何数据,则,自动发送一个KeepAlive对象给服务端,
用于维持连接。
由于,我们向服务端,可以发送很多不同的对象,服务端也可以返回不同的对象。
所以,对于返回对象的处理,要编写具体的ObjectAction实现类进行处理。
通过Client.addActionMap方法进行添加。这样,程序会回调处理。

服务端:
由于客户端会定时(keepAliveDelay毫秒)发送维持连接的信息过来,所以,服务端要有一个检测机制。
即当服务端receiveTimeDelay毫秒(程序中是3秒)内未接收任何数据,则,自动断开与客户端的连接。
ActionMapping的原理与客户端相似(相同)。
通过添加相应的ObjectAction实现类,可以实现不同对象的响应、应答过程。

❽ android socket通信延迟怎么解决

Handle 吧,

❾ 编写Android socket通信,想要服务器端向手机端发送消息,但会出现异常

服务端的 accept 之后 要在开一个线程 和 客户端 的socket (建立单一的信道)进行通信,才能保证是长连接 双方数据可以 持续发送,你说第一次可以 那是 你 TCP 三次握手成功后,你writeUTF(send_msg),你就 又把socket关闭了,信道就断了

❿ 请问 android 手机与手机可以直接通过 socket 通信吗

我之前做了一个小demo就是两部手机通过socket来通讯的,不过不是通过网络,是用蓝牙,sdk里面有BluetoothSocket专为蓝牙通讯服务的。可接发文件等。如果是网络进行socket通讯的话也可以啦

热点内容
车载wince和安卓哪个好用 发布:2025-01-12 05:58:18 浏览:838
vb6遍历文件夹 发布:2025-01-12 05:58:13 浏览:364
c在C语言中代表什么 发布:2025-01-12 05:52:59 浏览:46
政府PHP 发布:2025-01-12 05:34:30 浏览:651
转码算法 发布:2025-01-12 05:24:02 浏览:418
哪个国家开发安卓系统 发布:2025-01-12 05:08:58 浏览:407
华师数据库 发布:2025-01-12 05:07:03 浏览:505
爱情空间源码 发布:2025-01-12 04:51:53 浏览:892
mongodbphp安装 发布:2025-01-12 04:41:08 浏览:580
sql存储文件路径 发布:2025-01-12 04:37:31 浏览:243