当前位置:首页 » 安卓系统 » pcandroidsocket

pcandroidsocket

发布时间: 2025-10-12 23:04:29

㈠ 关于Android Socket 新手求教!

1.1什么是Socket Socket
是一种抽象层,应用程序通过它来发送和接收数据,使用Socket可以将应用程序添加到网络中,与处于同一网络中的其他应用程序进行通信。简单来说,Socket提供了程序内部与外界通信的端口并为通信双方的提供了数据传输通道。

1.2Socket的分类
根据不同的的底层协议,Socket的实现是多样化的。本指南中只介绍TCP/IP协议族的内容,在这个协议族当中主要的Socket类型为流套接字(streamsocket)和数据报套接字(datagramsocket)。流套接字将TCP作为其端对端协议,提供了一个可信赖的字节流服务。数据报套接字使用UDP协议,提供数据打包发送服务。
下面,我们来认识一下这两种Socket类型的基本实现模型。

二、Socket 基本通信模型

详细

㈡ 请问下,android能不能直接通过手机IP进行socket通信,不是局域.

可以的,只要通信的IP是通的就行了。
有两种方案:
1、在PC机上建立服务器,手机与手机之间的通信通过服务器进行中转
2、一部手机作为服务器,另一部手机作为客户端接入该手机
一般是第一种方案
1、pc端:
serverSocket=new ServerSocket(5648); //在5648端口进行侦听
Socket sk = serverSocket.accept();//如果有接入,则创建对应的socket;
2、手机端:
socket=new Socket("tobacco5648.xicp.net",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有几种方法

/***第一种:客户端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();
}

㈣ android socket接收事件为什么没有监听事件,要用死循环呢

  1. socket是Java API(编程文档接口),为了直接使用Socekt服务,谷歌直接把Java的Socket模块照搬过来的

Android 的 onClikcListener onTouchEvent 等是Android API(编程文档接口)

2.设计目的

编程接口全都是根据需求设定的,比如Google事先考虑开发者有使用监听事件的需求,才预定义了onClickListener onItemListener这些接口,并且将这些底层实现,封装到了c和C++层,开发者只需要直接使用Google事先为我们准备好的接口即可。

Socket ,首先Socket并不是Google事先设计好的,Socke中文名称作套接字,你网络搜套接字编程,可以认识到Socket开发是专门的编程技术,而Socket本身又是网络通信协议的基础设施,Socket的诞生历史,高于Android,甚至高于Java,Socekt是计算机提供进程通信能力的编程接口,确切的说,它甚至可以提供不同主机间不同进程的通信能力,(包括同一主机里不同进程的通信能力)

主机?端系统?网络协议?运输层?传输层?套接字?端口?

我说的这些专业名词,也许你一时半会并不能理解

值得庆幸的是,当你了解到这里,你起码能想明白,为什么有的人说,Android 程序,也可以做服务器了,因为Socket 提供了其他端系统访问Android程序的能力,能被请求访问的程序,可以称作服务端。

想深入了解Socket的设计原理、设计本意,需要深厚的计算机网络知识,在这里我建议你阅读《计算机网络-自顶向下方法》阅读前三章,也许你对网络编程会有更深的理解。

总结来说:

Android的Listener系列监听事件,其实只是响应用户I/O操作而已,是人与硬件设备的通信,安卓系统提供维持监听事件的能力,所以你能根据某些事件作出响应

Socket的功能,是提供进程通信的能力,安卓系统并不能直接控制Socket的生命周期,它第一层设计是Java代码,并不是Google自己研发的,第二层、第三层已经直接深入到运输层协议、计算机系统层原理了,Google为了省事,直接照搬Java API ,无可厚非。

热点内容
编译怎么样不出现负数和0 发布:2025-10-13 02:26:36 浏览:391
linuxarch安装 发布:2025-10-13 02:26:01 浏览:833
交叉编译c语言 发布:2025-10-13 02:25:19 浏览:515
shell常用脚本 发布:2025-10-13 02:23:43 浏览:779
python一个实例 发布:2025-10-13 02:22:24 浏览:433
我的世界秀方块的服务器 发布:2025-10-13 02:20:12 浏览:747
魔兽10开的什么配置 发布:2025-10-13 02:14:15 浏览:292
apache修改访问路径 发布:2025-10-13 01:59:15 浏览:724
VS编译器官网地址 发布:2025-10-13 01:59:13 浏览:527
pythonnetwork 发布:2025-10-13 01:46:05 浏览:483