之前一直会用sockets来实现emulator和PC进行通讯,卡了几天,最后请教其他人终于可以连接了。 错误原因是在IP和端口,IP要用本机IP(在CMD输入ipconfig,注意:每次开机本机IP都不同,ADSL是动态IP),端口用emulator的名称,5554或5556.java sever文件要另外建java工程运行,在android工程运行不了java(run application)
客户端代码:
Java代码
package com.yarin.android.Examples_08_04;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Activity01 extends Activity
{
private final String DEBUG_TAG = "Activity01";
private TextView mTextView=null;
private EditText mEditText=null;
private Button mButton=null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mButton = (Button)findViewById(R.id.Button01);
mTextView=(TextView)findViewById(R.id.TextView01);
mEditText=(EditText)findViewById(R.id.EditText01);
//登陆
mButton.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
Socket socket = null;
String message = mEditText.getText().toString() + "\r\n";
try
{
//创建Socket
socket = new Socket("116.29.27.138",5554); //查看本机IP,每次开机都不同
//socket=new Socket("192.168.1.110",50000);
//向服务器发送消息
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
out.println(message);
//接收来自服务器的消息
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg = br.readLine();
if ( msg != null )
{
mTextView.setText(msg);
}
else
{
mTextView.setText("数据错误!");
}
//关闭流
out.close();
br.close();
//关闭Socket
socket.close();
}
catch (Exception e)
{
// TODO: handle exception
Log.e(DEBUG_TAG, e.toString());
}
}
});
}
}
package com.yarin.android.Examples_08_04;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Activity01 extends Activity
{
private final String DEBUG_TAG = "Activity01";
private TextView mTextView=null;
private EditText mEditText=null;
private Button mButton=null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mButton = (Button)findViewById(R.id.Button01);
mTextView=(TextView)findViewById(R.id.TextView01);
mEditText=(EditText)findViewById(R.id.EditText01);
//登陆
mButton.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
Socket socket = null;
String message = mEditText.getText().toString() + "\r\n";
try
{
//创建Socket
socket = new Socket("116.29.27.138",5554); //查看本机IP,每次开机都不同
//socket=new Socket("192.168.1.110",50000);
//向服务器发送消息
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
out.println(message);
//接收来自服务器的消息
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg = br.readLine();
if ( msg != null )
{
mTextView.setText(msg);
}
else
{
mTextView.setText("数据错误!");
}
//关闭流
out.close();
br.close();
//关闭Socket
socket.close();
}
catch (Exception e)
{
// TODO: handle exception
Log.e(DEBUG_TAG, e.toString());
}
}
});
}
}
服务器端代码:
Java代码
package com.yarin.android.Examples_08_04;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server implements Runnable
{
public void run()
{
try
{
//创建ServerSocket
ServerSocket serverSocket = new ServerSocket(5554);
while (true)
{
//接受客户端请求
Socket client = serverSocket.accept();
System.out.println("accept");
try
{
//接收客户端消息
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String str = in.readLine();
System.out.println("read:" + str);
//向服务器发送消息
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(client.getOutputStream())),true);
out.println("server message");
//关闭流
out.close();
in.close();
}
catch (Exception e)
{
System.out.println(e.getMessage());
e.printStackTrace();
}
finally
{
//关闭
client.close();
System.out.println("close");
}
}
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
//main函数,开启服务器
public static void main(String a[])
{
Thread desktopServerThread = new Thread(new Server());
desktopServerThread.start();
}
}
注:博客涉及的源码请在千寻资源库:www.qxzyk.com 下载获取,谢谢支持。
分享到:
相关推荐
综上所述,实现Android模拟器和PC之间的Socket通信需要在PC端编写服务程序,Android端编写客户端程序,通过指定的IP地址和端口进行通信。确保Android应用有网络访问权限,处理好异常,以及正确地打开和关闭Socket...
本项目聚焦于在同一台PC上运行的两个Android模拟器之间的Socket通信,这对于开发和测试分布式应用程序或需要设备间通信的场景非常有用。以下是关于这个主题的详细解释: 一、Android Socket基础 Socket是网络通信的...
在本文中,我们将探讨如何实现Android模拟器中的Java应用程序与C++程序之间的通信,通过使用Socket进行TCP/IP连接。Socket编程是网络编程的基础,它允许不同设备间的进程通过网络交换数据。这里我们看到一个C++...
在PC端,我们将创建一个服务器端Socket,监听特定的端口,等待来自Android模拟器的连接请求。这通常涉及以下步骤: 1. 导入必要的Java套接字库:`import java.net.ServerSocket;` 和 `import java.net.Socket;` 2. ...
连接成功后,客户端和服务器端就可以通过Socket的输入流和输出流进行数据交换。 在两个Android模拟器之间的Socket通信中,你需要完成以下步骤: ### 步骤1:创建服务器端 在服务器端的Android应用中,你需要开启一...
在Android中使用Java进行Socket通信,首先需要创建一个Socket对象,指定服务器的IP地址和端口号。服务器端也需要启动一个ServerSocket监听特定的端口,等待客户端的连接请求。一旦客户端的Socket连接到服务器的...
总结来说,Android Socket TCP通信涉及服务器端和客户端的编程,需要理解TCP协议的工作原理,并熟练使用Java的Socket API。在实际开发中,要关注性能、安全性和用户体验,确保数据的可靠传输。通过Eclipse和Android ...
3. **Java服务器端Socket编程**: 在Java服务器端,我们需要创建一个ServerSocket监听特定端口,等待客户端连接。当连接建立后,服务器同样通过输入输出流接收和发送数据。这里是一个基础的服务器端实现: ```java...
利用Socket编程可以在客户端和服务器端之间建立连接,实现双向通信。 教学中应用TCP协议的Android模拟器间通信,主要目的是通过在一台计算机上模拟不同手机的网络通信环境,以便于在课堂上无需大量真实设备即可进行...
10. **测试与调试**:在实际环境中,可能需要借助模拟器或真机调试,确保手机和电脑之间的连接稳定可靠。同时,可以使用Wireshark等网络抓包工具监控数据包,辅助调试。 以上就是关于"Android在WiFi下手机与电脑的...
4. 在服务器端,通常会有一个循环来处理多个客户端的连接请求,每次accept()返回时都会处理一个新的客户端。 客户端程序(SocketClient)主要包括: 1. 创建Socket对象,指定服务器的IP地址和端口号。这里的IP地址...
本主题主要探讨如何在Android中实现Socket通信,包括客户端和服务器端的角色设定,以及如何在两个模拟器之间建立连接。 首先,我们来看一下**Android Socket基本概念**。Socket是基于TCP/IP协议的一种编程接口,它...
本项目“安卓soket聊天程序”提供了客户端和服务器端的源码,这些代码可以在Eclipse集成开发环境中直接导入并运行,方便开发者理解和学习如何在Android上实现基于Socket的聊天功能。 1. **Socket基础**: Socket,...
在Android开发过程中,ADB(Android Debug Bridge)是一个强大的工具,用于连接和管理设备或模拟器。本教程将探讨如何通过adb协议实现PC与Android设备之间的通信,并特别关注使用ddmlib库来创建一个简单的socket通信...
Socket socket = new Socket("服务器IP", 服务器端口号); ``` 确保服务器在同一网络环境下运行,并监听相应的端口。 2. **获取输入/输出流**:Socket建立后,我们需要通过其获取InputStream和OutputStream,以...
接下来,我们需要编写服务器端和客户端的Java程序。服务器端程序通常会创建一个`ServerSocket`对象,并绑定到指定的端口(如SERVERPORT = 8191)。`ServerSocket.accept()`方法用于等待客户端的连接请求,一旦有连接...
在Android端,我们首先需要创建一个Socket实例,指定服务器的IP地址和端口号,然后调用connect()方法建立连接。以下是一个简单的示例: ```java try { Socket socket = new Socket("服务器IP", 服务器端口); } ...
真机不能连接自己电脑的服务器的时候,可以使用模拟器测试 ============================================================================================= 原理:socket通信+多线程 1,服务器QQServer开启了一个...
当用户点击按钮时,Android代码创建一个新的Socket,指定服务器的IP地址(在这个例子中,使用的是模拟器的特殊IP "10.0.2.2")和端口号。`new Socket("10.0.2.2", 54321)`这行代码完成了客户端的连接。 客户端同样...
一个简单的聊天系统项目,客户端+服务器模式,也就是cs模式,采用java开发语言,服务器端建立Socket监听端口,客户端连接socket发送数据,服务器端将接收到的聊天信息,推送到所有的客户端界面,实现了多人聊天的...