‘壹’ android编程,用socket网络编程,PC作服务器,手机是客户端,连接不上
你PC 和手机要在同一个网络内,比如无线路由器,你手机用wifi连接路由,pc也连接路由,cmd命令查看下PC的ip地址,请确保你的Ip是PC的ip,权限加上,这样绝对是没问题的,把你PC防火墙关掉,socket连接最好用
socket=new Socket();
SocketAddress socketAddress = new InetSocketAddress(ip,PORT);
socket.connect(socketAddress,8000);//设置超时时间
‘贰’ android的socket编程里,如何一次只如去一个字节
InputStream is = 你获取到的输入流
int read = is.read(); 读取一个字节
这个是一个阻塞操作,直到读取到一个字节,否则一直会阻塞在那等待数据到达,
当返回-1的时候表示读取到流结尾了,可以理解成已经读取完输入流的全部数据了。
‘叁’ android socket编程有什么实例
通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。 SOCKET用于在两个基于TCP/IP协议的应用程序之间相互通信。最早出现在UNIX系统中,是UNIX系统主要的信息传递方式。在WINDOWS系统中,SOCKET称为WINSOCK。 两个基本概念:客户方和服务方。当两个应用之间需要采用SOCKET通信时,首先需要在两个应用之间(可能位于同一台机器,也可能位于不同的机器)建立SOCKET连接,发起呼叫连接请求的一方为客户方,接受呼叫连接请求的一方成为服务方。客户方和服务方是相对的,同一个应用可以是客户方,也可以是服务方。 在客户方呼叫连接请求之前,它必须知道服务方在哪里。所以需要知道服务方所在机器的IP地址或机器名称,如果客户方和服务方事前有一个约定就好了,这个约定就是PORT(端口号)。也就是说,客户方可以通过服务方所在机器的IP地址或机器名称和端口号唯一的确定方式来呼叫服务方。在客户方呼叫之前,服务方必须处于侦听状态,侦听是否有客户要求建立连接。一旦接到连接请求,服务方可以根据情况建立或拒绝连接。连接方式有两种,同步方式(Blocking)和(noBlocking). 客户方发送的消息可以是文本,也可以是二进制信息流。当客户方的消息到达服务方端口时,会自动触发一个事件(event),服务方只要接管该事件,就可以接受来自客户方的消息了。
‘肆’ android的socket编程里面,如何确定输入流的字节长度呢
inputstream.avaliable()
‘伍’ android 为什么一般要用http来进行网络编程,而用 socket 的比较少 sockest有什么缺点
http在tcp之上,要先用socket建立tcp才能实现http。只不过帮你把底层实现屏蔽了,面向对象的特点。
‘陆’ android socket 编程中,本机IP与虚拟机IP分别是多少
Socket(套接字)是一种抽象层,应用程序通过它来发送和接收数据,就像应用程序打开了一个文件句柄,将数据读写到稳定的存储器上一样。使用Socket可以将应用程序添加到网络中,并与处于同一网络中的其他应用程序进行通信。一台计算机上的应用程序向socket写入的信息能够被另一台计算机上的另一个应用程序读取,反之依然。根据不同的的底层协议实现,也会很多种不同的Socket。本课当中只覆盖了TCP/IP协议族的内容,在这个协议族当中主要的Socket类型为流套接字(stream socket)和数据报套接字(datagram socket)。流套接字将TCP作为其端对端协议,提供了一个可信赖的字节流服务。数据报套接字使用UDP协议,提供可一个“尽力而为”的数据报服务,应用程序可以通过它发送最长65500字节的个人信息。
使用基于TCP协议的Socket
一个客户端要发起一次通信,首先必须知道运行服务器端的主机IP地址。然后由网络基础设施利用目标地址,将客户端发送的信息传递到正确的主机上,在java中,地址可以由一个字符串来定义,这个字符串可以使数字型的地址(比如192.168.1.1),也可以是主机名(example.com)。
在Java当中InetAddress类代表了一个网络目标地址,包括主机名和数字类型的地址信息。
使用基于UDP的Socket
1.创建DatagramPacket
DatagramSocket(byte [] data,int offset,int length,InetAddress remoteAddr,int remotePort)该构造函数创建一个数据报文对象,数据包含在第一个参数当中
2.创建DatagramSocket创建
DatagramSocket(int localPort)以上构造函数将创建一个UDP套接字;
3. DatagramSocket:发送和接受
void send(DatagramPacket packet)
void receive(DatagramPacket packet)
send()方法用来发送DatagramPacket实例。一旦创建连接,数据报将发送到该套接字所连接的地址;
receive()方法将阻塞等待,知道接收到数据报文,并将报文中的数据复制到指定的DatagramPacket实例中
Android 模拟器中做端口重定向
android的模拟器有个特点,就是访问网络的时候只可以从模拟器主动往出去连。但是却无法主的从外面连接模拟器,这个特点和NAT几乎完全一样,具有单向连接的特性。 实际开发中我们希望模拟器像一台独立的手机一样,能和处于同一局域网中的手机进行端对端的通信。这时就需要做端口重定向。 类似于给路由器做nat的端口重定向。
运行模拟器:你会发现模拟器标题栏上写着端口号:5554,其实这个端口号是模拟器的console端口 >telnet到模拟器的console口上:telnet localhost 5554在控制台下输入 redir add tcp:6668:9998 就完成了从主机6668端口重定向到模拟器9998端口的任务
建议使用Android 手机进行调试,在模拟器使用java socket会遇上很多连接不上的问题,这些都是模拟,才导致的
‘柒’ Android socket编程,用线程来捕获socket返回的数据,出现了问题,没有
你这个写法,发送的代码在while循环以外,只能收一次,然后线程就退出了.
‘捌’ 如何用socket实现android手机与手机之间的通信
参考一般的JAVA的socket编程,如果通过手机网络,就不要使用UDP即可。
‘玖’ android Socket编程使用死循环一直收发数据CPU占用率过高怎么办
服务器端与客户端都加上Thread.sleep(XXX)方法,时间根据自己的需要权衡
‘拾’ android socket编程,客户端老是提示socket已关闭是为什么
TCP连接断开的时候调用closesocket函数,已经讨论过有优雅的断开和强制断开,那么如何设置断开连接的方式呢?是通过设置socket描述符一个linger结构体属性。
linger结构体数据结构如下:
struct linger
{
int l_onoff;
int l_linger;
};
有三种组合方式:
第一种
l_onoff = 0;
l_linger忽略
这种方式下,就是在closesocket的时候立刻返回,底层会将未发送完的数据发送完成后再释放资源,也就
是优雅的退出。
第二种
l_onoff非零
l_linger = 0;
这种方式下,在调用closesocket的时候同样会立刻返回,但不会发送未发送完成的数据,而是通过一个REST包强制的关闭socket描述符,也就是强制的退出。
第三种
l_onoff非零
l_linger > 0
这种方式下,在调用closesocket的时候不会立刻返回,内核会延迟一段时间,这个时间就由l_linger得值来决定。如果超时时间到达之前,发送完未发送的数据(包括FIN包)并得到另一端的确认,closesocket会返回正确,socket描述符优雅性退出。否则,closesocket会直接返回错误值,未发送数据丢失,socket描述符被强制性退出。需要注意的时,如果socket描述符被设置为非堵塞型,则closesocket会直接返回值。
关于TCP的退出暂时了解这些,遇到问题再具体分析解决。