当前位置:首页 » 安卓系统 » androidsocket地址

androidsocket地址

发布时间: 2022-05-30 06:17:12

‘壹’ 在android开发中进行socket通信时android虚拟机端的ip地址是多少

用过真机做过实验,因为不知道虚拟机怎么获取i端口,用真机的话,有一个函数可以直接获取本机的ip地址(用的是wifi)端口直接设定就可以。函数是:String hostIPAddress = getLocalIPAddress();还有一点就是虚拟机不支持wifi,要是用虚拟机进行测试的话,要设置android.permission.INTERNET权限才能模拟进行网络连接。(也可以用这个来模拟wifi连结)。

‘贰’ 请问下,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通信ip地址写什么

写另一个的呀,不过这样一般不太好做,可以做成一个服务器,两个手机先连上服务器,然后再互联通讯。可以看一下打洞原理

‘肆’ 在android开发中,进行socket通信时,android虚拟机端的ip地址是多少

一般ip都是你自己的服务器的地址,假如是自己的服务器,就写自己的地址,端口一般是8888

‘伍’ 安卓socket编程的服务器端的地址是什么

服务端的地址就是你服务器运行的电脑的ip地址,服务器运行在哪个电脑,那个电脑的ip就是你服务器端的地址。
使用socket编程的话创建服务器端的时候一般都是ServerSocket来创建一个对象,通过new构造函数的时候传入一个端口号,客户端连接的时候除了使用服务器端ip还有这个端口号,创建了对象之类,开启无限循环,用这个对象调用accept()方法,这就是常说的心跳连接,这个方法会一直阻塞,直到有客户端连接上。
客户端连接的时候也需要创建Socket对象,实例化这个对象的时候就需要传入服务器端ip和端口号,然后就可以利用这个对象获取输入输出流与服务器交互。
同样服务器端的ServerSocket对象调用accept()方法返回的Socket对象也可以获取输入输出流对象,然后利用这些流与客户端交互。

‘陆’ Android Socket通信开发,求详细过程,附加注释,谢谢

服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容。Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容。
Socket类型为流套接字(streamsocket)和数据报套接字(datagramsocket)。
Socket基本实现原理
TCP与UDP
1基于TCP协议的Socket
服务器端首先声明一个ServerSocket对象并且指定端口号,然后调用Serversocket的accept()方法接收客户端的数据。accept()方法在没有数据进行接收的处于堵塞状态。(Socketsocket=serversocket.accept()),一旦接收到数据,通过inputstream读取接收的数据。
客户端创建一个Socket对象,指定服务器端的ip地址和端口号(Socketsocket=newSocket("172.168.10.108",8080);),通过inputstream读取数据,获取服务器发出的数据(OutputStreamoutputstream=socket.getOutputStream()),最后将要发送的数据写入到outputstream即可进行TCP协议的socket数据传输。

‘柒’ android socket 编程中,本机IP与虚拟机IP分别是多少

Socket(套接字)是一种抽象层,应用程序通过它来发送和接收数据,就像应用程序打开了一个文件句柄,将数据读写到稳定的存储器上一样。使用Socket可以将应用程序添加到网络中,并与处于同一网络中的其他应用程序进行通信。一台计算机上的应用程序向socket写入的信息能够被另一台计算机上的另一个应用程序读取,反之依然。根据不同的的底层协议实现,也会很多种不同的Socket。本课当中只覆盖了TCP/IP协议族的内容,在这个协议族当中主要的Socket类型为流套接字(stream socket)和数据报套接字(datagram socket)。流套接字将TCP作为其端对端协议,提供了一个可信赖的字节流服务。数据报套接字使用UDP协议,提供可一个“尽力而为”的数据报服务,应用程序可以通过它发送最长65500字节的个人信息。


  1. 使用基于TCP协议的Socket

    一个客户端要发起一次通信,首先必须知道运行服务器端的主机IP地址。然后由网络基础设施利用目标地址,将客户端发送的信息传递到正确的主机上,在java中,地址可以由一个字符串来定义,这个字符串可以使数字型的地址(比如192.168.1.1),也可以是主机名(example.com)。
    在Java当中InetAddress类代表了一个网络目标地址,包括主机名和数字类型的地址信息。


  2. 使用基于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实例中


  3. Android 模拟器中做端口重定向

    android的模拟器有个特点,就是访问网络的时候只可以从模拟器主动往出去连。但是却无法主的从外面连接模拟器,这个特点和NAT几乎完全一样,具有单向连接的特性。 实际开发中我们希望模拟器像一台独立的手机一样,能和处于同一局域网中的手机进行端对端的通信。这时就需要做端口重定向。 类似于给路由器做nat的端口重定向。


  4. 运行模拟器:你会发现模拟器标题栏上写着端口号:5554,其实这个端口号是模拟器的console端口 >telnet到模拟器的console口上:telnet localhost 5554在控制台下输入 redir add tcp:6668:9998 就完成了从主机6668端口重定向到模拟器9998端口的任务


  5. 建议使用Android 手机进行调试,在模拟器使用java socket会遇上很多连接不上的问题,这些都是模拟,才导致的

‘捌’ android socket怎么获得ip地址

TCP Socket的代码
[java] view plain
class TCPThread extends Thread {
@Override
public void run() {
Log.i("juetion", "TCPThread runing");
int i = 0;
while (!this.isInterrupted()) { //判断是否中断线程
ServerSocket serverSocket = null;//声明一个ServerSocket对象
Log.i("juetion", "TCPThread run times:" + (i));
i++;
try {
serverSocket = new ServerSocket(12345);//创建一个ServerSocket对象,并在12345端口监听
Socket socket = serverSocket.accept();//接受客户端发送的请求
InputStream inputStream = socket.getInputStream();//获取数据流
byte buffer[] = new byte[1024 * 4];
int temp = 0;
while ((temp = inputStream.read(buffer)) != -1) {
Log.i("juetion", new String(buffer, 0, temp)); //数据输出
}
} catch (IOException e) {
e.printStackTrace();
}
try {
Log.i("juetion", "serverSocket close");
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
UDP Socket 的代码:
[java] view plain
class UDPThread extends Thread {
@Override
public void run() {
Log.i("juetion", "UDPThread runing");
int i = 0;
while (!this.isInterrupted()) {//判断是否中断线程
DatagramSocket datagramSocket = null;//声明DatagramSocket对象
Log.i("juetion", "UDPThread run times:" + (i));
i++;
try {
datagramSocket = new DatagramSocket(12345);//创建对象,并监听12345端口
byte data[] = new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(data, data.length); //获取数据包
datagramSocket.receive(datagramPacket);//接受数据
Log.i("juetion", "" + new String(datagramPacket.getData(), datagramPacket.getOffset(), datagramPacket.getLength()));//数据输出
} catch (Exception e) {
e.printStackTrace();
}
Log.i("juetion", "datagramSocket close");
datagramSocket.close();
}
}
}

‘玖’ 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连接)

其实跟电脑差不多了,android里调用socket的方法,拿到socket后就可以发送数据并接收数据。

我最近正在做android方面的通信,真的想把完整的代码都给你,可是没办法,公司机密。。

给你我的socket连接类吧。。。

package sean.socket;

///////////把MyType的一些方法替换成Writer的方法
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

import sean.Sysout;
import sean.business.BusinessCenter;
import sean.business.LoginManager;
import sean.format.MyType;
import sean.io.Reader;
import sean.transfer.BytesBuffer;
import sean.transfer.DataCenter;

public class SocketThread implements Runnable {

String Server = "";
int Port = 0;
static Socket cs = null;
// Thread ioThread=null;
static boolean bool_SocketThread = false;
static OutputStream output = null;

public SocketThread(String server, int port) {
Server = server;
Port = port;
bool_SocketThread = true;
}

@Override
public void run() {
// TODO Auto-generated method stub
while (bool_SocketThread) {
try {
// if (cs == null) {
DataCenter.setBool_Login(false);// 设置登录失败
Sysout.println("正在尝试连接ClientSocket...", Sysout.TempOutDebug);
cs = new Socket(InetAddress.getByName(Server), Port);
if (cs != null) {
Sysout.println("ClientSocket连接成功!__" + cs,
Sysout.TempOutDebug);
cs.setKeepAlive(true);//让socket保持活动状态

InputStream input = cs.getInputStream();
output = cs.getOutputStream();
BusinessCenter.sendLoginData();

BytesBuffer bBuffer = new BytesBuffer();
byte[] Buffer = new byte[1024];
int ReadBytes = input.read(Buffer);
while (ReadBytes != -1) {
Sysout.println("已读取" + ReadBytes + "个字节到缓冲区",
Sysout.TempOutDebug);
byte[] b = new byte[ReadBytes];
b = MyType.BytesInsertToBytes(Buffer, b, 0);
Reader r = new Reader(b);
Sysout.println(r.toString() + "____ReadBytes=="
+ ReadBytes, Sysout.TempOutDebug);
bBuffer.InsertToBuffer(Buffer, ReadBytes);
ReadBytes = input.read(Buffer);
}
} else {
Sysout.printException("ClientSocket连接失败!请确认网络正常且服务器已开启。");
}
// }
// 执行到这里说明inputstream.read()已中断,说明socket已断开连接
// cs=null;
LoginManager.setLoginValue(-1);// 业务中心登录注销,即登录管理器注销登录
DataCenter.setBool_Login(false);// 数据中心登录注销
Sysout.printException(cs + "已断开。");
Thread.sleep(2 * 1000);// 睡眠2秒后继续循环

// try {
// // 判断ClientSocket是否已断开
// cs.sendUrgentData(0);
// } catch (IOException e) {
// // TODO Auto-generated catch block
// Sysout.printException("ClientSocket已断开,重新连接。"+e);
// cs.close();
// cs = null;
// }
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
Sysout.printException("SocketThread.java====解析服务器名称发生异常!" + e);
// e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
Sysout.printException("SocketThread发生IO异常,异常消息:" + e);
try {
if (cs != null) {
Sysout.println("准备关闭" + cs, Sysout.TempOutDebug);
cs.shutdownOutput();
cs.shutdownInput();
cs.close();
cs = null;
output = null;
LoginManager.setLoginValue(-1);// 业务中心登录注销,即登录管理器注销登录
DataCenter.setBool_Login(false);// 数据中心登录注销
Sysout.println(cs + "已关闭。", Sysout.TempOutDebug);
}
try {
Thread.sleep(5000);
} catch (InterruptedException e2) {
// TODO Auto-generated catch block
Sysout.printException("SocketThread.java====线程睡眠异常!!"
+ e2);
// e2.printStackTrace();
}
String ExceptionInfos=e.toString();
if(ExceptionInfos.endsWith("Connection refused")){
stopSocketThread();
}
} catch (IOException e1) {
// TODO Auto-generated catch block
Sysout.printException(cs + "关闭发生异常::" + e1);
// e1.printStackTrace();
try {
Thread.sleep(5000);
} catch (InterruptedException e2) {
// TODO Auto-generated catch block
Sysout.printException("SocketThread.java====线程睡眠异常!!"
+ e2);
// e2.printStackTrace();
}
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}// while(bool_SocketThread)
Sysout.println("SocketThread已停止。", Sysout.TempOutDebug);
}

public static Socket getSocket() {
return cs;
}

// public void setBool(boolean bool0) {
// bool_SocketThread = bool0;
// }

public static OutputStream getOutputStream() {
return output;
}

public static void stopSocketThread() {
try {
// 停止SocketThread线程,必须先把循环的标志bool_SocketThread置为false,否则可能继续循环,重新建立socket连接
bool_SocketThread = false;
// 关闭socket
if (cs != null) {
cs.shutdownOutput();
cs.shutdownInput();
cs.close();
cs = null;
output = null;

Sysout.println("ClientSocket已被强制关闭。");
// LoginManager.setLoginValue(-1);// 业务中心登录注销,即登录管理器注销登录
// DataCenter.setBool_Login(false);// 数据中心登录注销
// byte[] lock=LoginActivity.getLock();
// synchronized(lock){
// lock.notify();
// }
}
} catch (IOException e) {
// TODO Auto-generated catch block
Sysout.printException("强制关闭" + cs + "发生异常::" + e);
// e.printStackTrace();
}
}

}

必须先在android里启动一个服务,由服务去启动这个socket线程,因为如果是UI去启动的话,页面会卡住。。。

热点内容
javaopenssl加密 发布:2025-08-21 03:46:51 浏览:552
传智php培训 发布:2025-08-21 03:46:45 浏览:509
我的世界如何在服务器检查自己在线时间 发布:2025-08-21 03:45:28 浏览:464
linux查看挂载的存储 发布:2025-08-21 03:41:34 浏览:843
cryptopythonrsa 发布:2025-08-21 03:36:29 浏览:674
androidmandroidn 发布:2025-08-21 03:31:50 浏览:211
为什么不能把安卓桌面app设为默认 发布:2025-08-21 03:22:31 浏览:442
爱奇艺会员密码哪里设置 发布:2025-08-21 03:11:57 浏览:262
电信电话密码是什么 发布:2025-08-21 03:08:14 浏览:446
sqlserver自动收缩 发布:2025-08-21 03:07:28 浏览:685