导航:首页 > 操作系统 > androidsocket读取

androidsocket读取

发布时间:2025-07-29 16:01:28

1. android Socket一个 BufferedReader读取问题

1,网络编程传输的数据都是以二进制格式来传输的。2,所以传输流第一层必须使用字节流而不能使用字符流3,后面就可以使用BufferedReader套接在字节流外层了例:BufferedReaderclientReader=newBufferedReader(newInputStreamReade(socket.getInputStream()));//读数据PrintStreamprintStream=newPrintStream(socket.getOutputStream());//发送数据printStream.println("xxxxxxx");发送一个带换行符的数据clientReader.readline();//接收带换行符的数据4,您也可以试试使用BufferedInputStream。

2. Android ParcelFileDescriptor实现进程间通信

一个通信通道,实现跨进程的的Socket网络通信。
具体的通信通道的图如下。

android进程间通信是使用Binder来传数据,而Binder传输的数据,有一个最为基本的要求,就是要实现Parcelable接口。

ParcelFileDescriptor是android提供的一个数据结构。

ParcelFileDescriptor是可以用于进程间Binder通信的FileDescriptor。支持stream 写入和stream 读出

我们可以使用

来将PacecelFileDescriptor 与File对应起来,以实现进程间的文件共享。

我们也可以使用

来建立一个pipe通信通道,ParcelFileDescriptor数组第一个元素是read端,第二个元素是write端,通过write端的AutoCloseOutputStream和read端的AutoCloseInputStream,我们就可以实现进程见的数据流传输了。

发送端:
1. 业务层调用getOutputStream向通信层发起请求
2. 通信层通过creatPipe 建立一个ParcelFileDescriptor数组,并将write端的pipe[1]返回给业务层
3. 业务层得到pipe[1](ParcelFileDescriptor)后,可以通过AutoCloseOutputStream写入数据
4. 从通信层的pipe[0]的AutoCloseInputStream中读出数据通过socket发送出去

接收端:
1. 业务层调用getInputStream向通信层发起请求
2. 通信层通过creatPipe 建立一个ParcelFileDescriptor数组,并将read端的pipe[0]返回给业务层
3. 业务层得到pipe 0 后,可以通过AutoCloseInputStream读取数据。(如没有数据,则阻塞,一直等到有数据为止)
4. socket中读取数据,写入到通信层的pipe[1]的AutoCloseOutputStream。(pipe[1]一旦写入,第三步中pipe[2]就可以读取出数据)

3. android socket外网

首先,外网访问的前提是你的外网地址必须是固定的。在路由器上设置端口映射是实现这一目标的一种方法,不过部分路由器可能不直接提供这一功能。假设你在局域网内的服务器地址是192.168.2.3,并且端口为4000,那么你可以在上网的路由器上设置端口映射,将外部端口XXXX映射到192.168.2.3的4000端口。这样一来,当你对外网的固定地址XXXX发起socket连接时,实际连接会被转发到192.168.2.3的4000端口上,与平时的socket连接没有区别。

对于动态IP地址的情况,可以使用花生壳服务来解决。花生壳服务能够根据你的动态IP地址自动调整访问的路由,你只需通过访问花生壳提供的域名,就可以自动指向你的动态IP地址。这样一来,无论你的IP地址如何变化,都可以保持稳定的访问。

关于java中通过域名获取IP地址的方法,可以使用以下代码片段实现:

java
public InetAddress[] getServerIP(String domain) {
try {
InetAddress[] myServer = InetAddress.getAllByName(domain);
return myServer;
} catch (UnknownHostException e) {
e.printStackTrace();
}
return null;
}

这段代码通过传入的域名获取到对应的IP地址数组。请注意,这段代码是从网上复制的,虽然看起来是正确的,但在使用前建议进行编译测试,确保其正确性。

总之,通过合理设置端口映射和使用花生壳服务,可以很好地解决Android应用在socket连接中的外网访问问题。在实际应用中,根据不同的需求选择合适的方法是非常重要的。

4. android socket有几种方法

/***第一种:客户端Socket通过构造方法连接服务器***/
//客户端Socket可以通过指定IP地址或域名两种方式来连接服务器端,实际最终都是通过IP地址来连接服务器
//新建一个Socket,指定其IP地址及端口号
Socket socket = new Socket("192.168.0.7",80);
/***Socket 客户端 一些常用设置***/
//客户端socket在接收数据时,有两种超时:1.连接服务器超时,即连接超时;2.连接服务器成功后,接收服务器数据超时,即接收超时
//*设置socket 读取数据流的超时时间
socket.setSoTimeout(5000);
//发送数据包,默认为false,即客户端发送数据采用Nagle算法
//但是对于实时交互性高的程序,建议其改为true,即关闭Nagle算法,客户端每发送一次数据,无论数据包大小都会将这些数据发送出去
socket.setTcpNoDelay(true);
//设置客户端socket关闭时,close()方法起作用时延迟1分钟关闭,如果1分钟内尽量将未发送的数据包发送出去
socket.setSoLinger(true, 60);
//设置输出流的发送缓冲区大小,默认是8KB,即8096字节
socket.setSendBufferSize(8096);
//设置输入流的接收缓冲区大小,默认是8KB,即8096字节
socket.setReceiveBufferSize(8096);
//作用:每隔一段时间检查服务器是否处于活动状态,如果服务器端长时间没响应,自动关闭客户端socket
//防止服务器端无效时,客户端长时间处于连接状态
socket.setKeepAlive(true);
/*** Socket客户端向服务器端发送数据 ****/
//客户端向服务器端发送数据,获取客户端向服务器端输出流
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
//代表可以立即向服务器端发送单字节数据
socket.setOOBInline(true);
//数据不经过输出缓冲区,立即发送
socket.sendUrgentData(65);//"A"
//向服务器端写数据,写入一个缓冲区
//注:此处字符串最后必须包含“\r\n\r\n”,告诉服务器HTTP头已经结束,可以处理数据,否则会造成下面的读取数据出现阻塞
//在write()方法中可以定义规则,与后台匹配来识别相应的功能,例如登录Login()方法,可以写为write("Login|test,123 \r\n\r\n"),供后台识别;
bw.write("Login|test,123 \r\n\r\n");
//发送缓冲区中数据,必须有
bw.flush();

/*** Socket客户端读取服务器端响应数据 ****/
//socket.isConnected代表是否连接成功过
if((socket.isConnected() == true) && (socket.isClosed() == false)){//判断Socket是否处于连接状态
//客户端接收服务器端的响应,读取服务器端向客户端的输入流
InputStream is = socket.getInputStream();
//缓冲区
byte[] buffer = new byte[is.available()];
//读取缓冲区
is.read(buffer);
//转换为字符串
String responseInfo = new String(buffer);
//日志中输出
Log.i("TEST", responseInfo);
} //关闭网络
socket.close();
/***第二种:通过connect方法连接服务器***/
Socket socket_other = new Socket();
//使用默认的连接超时
socket_other.connect(new InetSocketAddress("192.168.0.7",80));
//连接超时2s
socket_other.connect(new InetSocketAddress("192.168.0.7",80),2000);
//关闭socket
socket_other.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

阅读全文

与androidsocket读取相关的资料

热点内容
利用命令方块快速填满发射器 浏览:567
安卓8核处理器如何 浏览:683
python口诀for 浏览:504
手机126邮件服务器怎么填 浏览:932
devc编译异常 浏览:457
云服务器出租好干嘛 浏览:858
湖南长沙服务器秒杀云主机 浏览:742
nb系列网络型可编程终端 浏览:588
linux启动不了mysql 浏览:674
怎么用服务器来跑包 浏览:639
情智力pdf 浏览:935
教学编程视频软件 浏览:920
linux服务器绑定域名 浏览:703
网络许可加密 浏览:315
优什么的服务器网站 浏览:962
英朗变排量压缩机 浏览:326
单片机遥控编码 浏览:147
ghost备份压缩率 浏览:594
javahex加密 浏览:338
谷歌代理服务器怎么用 浏览:656