C#服务器和Android客户端
我正在开发两个程序,一个是运行服务器时的Microsoft visual studio 2010软件,另一个是Eclipse ADT(安卓设备开发环境),我假设在其中运行客户端。目标是在C#中的服务器和Android客户端之间建立连接。这应该不是一个问题,我在TCP和UDP上进行了尝试,它落在对象创建上下文上(在落在对象套接字上的TCP和落在数据报对象创建上的UDP套接字中),在我看来问题是:activitythread.performlaunchactivity(activitythread$activityclientreco rd intent)第2247行 据我所知,问题不在我的代码片段中,而在Eclipse内置软件的套接字补充中,我尝试重新安装,添加最新的插件。关于你的下一个问题,我做了Android设备和互联网的许可。我不知道该如何解决这个问题,我要解决这个问题一个多月 此外,我将在android客户端中添加我的代码:C#服务器和Android客户端,c#,android,eclipse,sockets,tcp,C#,Android,Eclipse,Sockets,Tcp,我正在开发两个程序,一个是运行服务器时的Microsoft visual studio 2010软件,另一个是Eclipse ADT(安卓设备开发环境),我假设在其中运行客户端。目标是在C#中的服务器和Android客户端之间建立连接。这应该不是一个问题,我在TCP和UDP上进行了尝试,它落在对象创建上下文上(在落在对象套接字上的TCP和落在数据报对象创建上的UDP套接字中),在我看来问题是:activitythread.performlaunchactivity(activitythread$
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import android.util.Log;
public class MainActivity extends Activity {
private TextView txt;
private Button b;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b = (Button)findViewById(R.id.button1);
txt = (TextView)findViewById(R.id.textView1);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
connectSocket("Hello");
}
});
}
private void connectSocket(String a){
try {
InetAddress serverAddr = InetAddress.getByName("10.0.0.8");
Log.d("TCP", "C: Connecting...");
**Socket socket = new Socket(serverAddr, 4444);**
String message = "1";
PrintWriter out = null;
BufferedReader in = null;
try {
Log.d("TCP", "C: Sending: '" + message + "'");
out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out.println(message);
while ((in.readLine()) != null) {
txt.append(in.readLine());
}
Log.d("TCP", "C: Sent.");
Log.d("TCP", "C: Done.");
} catch(Exception e) {
Log.e("TCP", "S: Error", e);
} finally {
socket.close();
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
Log.e("TCP", "C: UnknownHostException", e);
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
Log.e("TCP", "C: IOException", e);
e.printStackTrace();
}
}
}
我的服务器是C#:
使用系统;
使用系统文本;
使用System.Collections.Generic;
使用System.Linq;
Net系统;
使用System.Net.Sockets;
公共类TestTCP
{
公共静态void Main()
{
尝试
{
IPAddress ipAd=IPAddress.Parse(“127.0.0.1”);
//使用本地m/c IP地址,以及
//在客户端中使用相同的方法
/*初始化侦听器*/
TcpListener myList=新的TcpListener(ipAd,11000);
/*在指定的端口开始侦听*/
myList.Start();
WriteLine(“服务器正在端口11000处运行…”);
Console.WriteLine(“本地端点是:”+
myList.LocalEndpoint);
WriteLine(“等待连接…”);
m:
套接字s=myList.AcceptSocket();
Console.WriteLine(“从“+s.RemoteEndPoint”接受连接);
字节[]b=新字节[100];
int k=s.Receive(b);
char cc='';
字符串测试=null;
Console.WriteLine(“接收…”);
对于(int i=0;i
谢谢。首先,您不能在UI线程中运行
connecSocket
方法。你必须这样做:
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Thread stackOverflow = new Thread(new Runnable() {
@Override
public void run() {
connectSocket("Hello");
}});
stackOverflow.start();
}
});
否则会出现以下异常:
android.os.NetworkOnMainThreadException
其次,您必须连接到服务器正在侦听的同一端口和接口:
IPAddress ipAd = IPAddress.Parse("127.0.0.1");
Socket socket = new Socket(serverAddr, 11000);
应与您在Android应用程序中使用的地址相同:
IPAddress ipAd = IPAddress.Parse("10.0.0.8");
您的Android应用程序必须连接到服务器正在侦听的同一端口:
IPAddress ipAd = IPAddress.Parse("127.0.0.1");
Socket socket = new Socket(serverAddr, 11000);
最后,不要忘记Android权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
小心使用防火墙之类的东西,它们也可能会断开你的连接。好的,所以在C#中我没有做任何更改,但在android中我设置了权限,将ipAdrr更改为10.0.0.8,并像你一样执行b.click线程。现在,它不起作用,但它不会把我踢出这个项目。怎么办?没有错误或什么的。非常感谢!!:)@BenTubul C#代码必须更改为
IPAddress ipAd=IPAddress.Parse(“10.0.0.8”)代码>和Android应用程序到Socket Socket=new Socket(serverAddr,11000)代码>(Android应用程序必须连接到您的C#服务器正在侦听的同一端口和地址)如果您这样做,它应该可以工作(至少对我来说是这样)别忘了,Android应用程序和您的C#服务器之间的某些东西可能会中断连接尝试。检查您是否启用了防火墙或防病毒程序以避免连接。如您所见:这是错误的,该程序不允许我运行它。再次感谢你的帮助,伙计:)@BenTubul你必须找出你的C#server要运行的机器的IP地址。在Windows中,您可以从cmd.exe
控制台运行此命令:ipconfig/all
查找已启用的接口及其IP地址读取名为IP address
的条目,然后将其值用于C#IPAddress ipAd=IPAddress.Parse(已启用的\u接口\u地址)代码>对于Android:inetAddressServerAddr=InetAddress.getByName(您的\u启用的\u接口\u地址)代码>当我键入ipconfig时,它允许我在这个ip上运行,但它也不起作用(我的意思是使用我从cmd获得的新ip)。嗯,我希望你能给我力量,这对我来说非常重要,我明天有一件大事要做再次感谢!!