我正在创建我的计算机和android之间的客户端套接字连接。
以下是服务器的代码:
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
class Server {
public static void main(String[] args) {
String ip = getIpAddress();
if (ip != "false") {
try {
ServerSocket srvr = new ServerSocket(4444);
Socket client = null;
try {
client = srvr.accept();
PrintWriter out = new PrintWriter(client.getOutputStream(), true);
System.out.print("Sending ip address: '" + ip + "'\n");
out.print(ip);
out.close();
client.close();
srvr.close();
} catch(Exception e) {
System.out.print(String.format("Accept failed: %s",e));
}
} catch (Exception e) {
System.out.print(String.format("Could not listem on port: %s",e));
}
}
else
{
System.out.print("Could not get ip address");
}
}
public static String getIpAddress() {
InetAddress host;
String ipString = "false";
try {
host = InetAddress.getLocalHost();
ipString = host.getHostAddress();
} catch (UnknownHostException e) {
System.out.println(e);
}
return ipString;
}
}
当我在计算机上运行客户端时,一切都正常。以下是计算机客户端的代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
System.out.print(RunSocketClient());
}
public static String RunSocketClient() {
try {
Socket clnt = new Socket("localhost",4444);
BufferedReader in = new BufferedReader(new InputStreamReader(clnt.getInputStream()));
String fromServer;
fromServer = in.readLine();
return fromServer;
} catch (IOException e) {
return "nothing";
}
}
}
当我在android中运行this客户端代码时,系统停止工作,错误是什么?这是android客户端代码:
package com.example.clientapp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout lView = new LinearLayout(this);
TextView myText = new TextView(this);
String ip = RunSocketClient();
Log.d("ClientApp",ip);
myText.setText(ip);
lView.addView(myText);
setContentView(lView);
}
public static String RunSocketClient() {
try {
Socket clnt = new Socket("localhost",4444);
BufferedReader in = new BufferedReader(new InputStreamReader(clnt.getInputStream()));
String fromServer;
fromServer = in.readLine();
return fromServer;
} catch (IOException e) {
return "nothing";
}
}
}
以下是应用程序崩溃的日志:
04-13 00:10:31.411: D/AndroidRuntime(13978): Shutting down VM
04-13 00:10:31.411: W/dalvikvm(13978): threadid=1: thread exiting with uncaught exception (group=0x410ab300)
04-13 00:10:31.411: E/AndroidRuntime(13978): FATAL EXCEPTION: main
04-13 00:10:31.411: E/AndroidRuntime(13978): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.clientapp/com.example.clientapp.MainActivity}: android.os.NetworkOnMainThreadException
04-13 00:10:31.411: E/AndroidRuntime(13978): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
04-13 00:10:31.411: E/AndroidRuntime(13978): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
04-13 00:10:31.411: E/AndroidRuntime(13978): at android.app.ActivityThread.access$600(ActivityThread.java:130)
04-13 00:10:31.411: E/AndroidRuntime(13978): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
04-13 00:10:31.411: E/AndroidRuntime(13978): at android.os.Handler.dispatchMessage(Handler.java:99)
04-13 00:10:31.411: E/AndroidRuntime(13978): at android.os.Looper.loop(Looper.java:137)
04-13 00:10:31.411: E/AndroidRuntime(13978): at android.app.ActivityThread.main(ActivityThread.java:4745)
04-13 00:10:31.411: E/AndroidRuntime(13978): at java.lang.reflect.Method.invokeNative(Native Method)
04-13 00:10:31.411: E/AndroidRuntime(13978): at java.lang.reflect.Method.invoke(Method.java:511)
04-13 00:10:31.411: E/AndroidRuntime(13978): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
04-13 00:10:31.411: E/AndroidRuntime(13978): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
04-13 00:10:31.411: E/AndroidRuntime(13978): at dalvik.system.NativeStart.main(Native Method)
04-13 00:10:31.411: E/AndroidRuntime(13978): Caused by: android.os.NetworkOnMainThreadException
04-13 00:10:31.411: E/AndroidRuntime(13978): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
04-13 00:10:31.411: E/AndroidRuntime(13978): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
04-13 00:10:31.411: E/AndroidRuntime(13978): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
04-13 00:10:31.411: E/AndroidRuntime(13978): at java.net.InetAddress.getAllByName(InetAddress.java:214)
04-13 00:10:31.411: E/AndroidRuntime(13978): at java.net.Socket.tryAllAddresses(Socket.java:108)
04-13 00:10:31.411: E/AndroidRuntime(13978): at java.net.Socket.<init>(Socket.java:177)
04-13 00:10:31.411: E/AndroidRuntime(13978): at java.net.Socket.<init>(Socket.java:149)
04-13 00:10:31.411: E/AndroidRuntime(13978): at com.example.clientapp.MainActivity.RunSocketClient(MainActivity.java:34)
04-13 00:10:31.411: E/AndroidRuntime(13978): at com.example.clientapp.MainActivity.onCreate(MainActivity.java:23)
04-13 00:10:31.411: E/AndroidRuntime(13978): at android.app.Activity.performCreate(Activity.java:5008)
04-13 00:10:31.411: E/AndroidRuntime(13978): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
04-13 00:10:31.411: E/AndroidRuntime(13978): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
04-13 00:10:31.411: E/AndroidRuntime(13978): ... 11 more
在应用程序中,会发生NetworkOnMainThreadException。从医生那里你可以看到
当应用程序尝试在其主线程上执行网络操作时引发的异常。
因此,您必须从另一个线程而不是主线程调用RunSocketClient方法。使用处理程序、asynctask或其他线程来执行此操作。
要了解好的设计,您可以查看此链接
http://developer.android.com/training/articles/perf-anr.html
我对套接字协议非常陌生,我肯定问题来自于我对此几乎一无所知。但是基本上我在服务器端口5000上有一个套接字,我需要一个angularjs代码来监听这个套接字。服务器上的套接字可以读取我从另一台计算机(客户端)发送的任何内容。但是由于某种原因,angular代码不能监听/连接到插座。以下是我现在所拥有的: index.html 下面是angularjs代码: 在Firefox中: Firefox无法
Java: 在C#中-它停止在“receiver=listener.accept();”在java(android)中-它停止于“sender_socket=new Socket(serverAddr,SERVERPORT);”这应该是java套接字函数的问题--需要另一个函数连接到C#-server。
我在unix(OSX)机器上使用kqueue建立了一个TCP/IP echo服务器,它可以打开100个TCP/IP端口,每个端口接受4000个客户端,我使用另外15台机器建立了大约23万个连接。(每道工序4000康纳,每箱4道工序) 服务器似乎可以接受更多,但问题是客户端,建立更多连接是有限制的。如Windows XP-3000、Windows7、UNIX-16384。 我怎么克服?
首先我要感谢你花时间... 我在macbook中用C++创建了一个服务器套接字,在运行windows XP的不同机器中用Java创建了一个客户机/套接字。我已将端口指定为5000,但无法指定正确的主机,因此无法进行连接。当我在windows xp中使用WinSock2创建一个C++服务器/套接字时,当我使用本地主机时,连接是完美的...有什么想法吗??? 提前Thnx int main(int a
我希望能够连接到需要智能卡的个人证书进行身份验证的https站点。我想我已经很接近让它工作了,但不知道如何克服这个例外: 由于合同关系,我不能共享我的代码,但这里有一个总结: 我创建了一个密钥库,其中包含从浏览器导出的所有证书。我使用此密钥存储作为SSLContext的信任存储。我非常肯定这个密钥库包含正确的CA证书来验证远程站点的证书,因为它修复了“无法找到请求目标的有效证书路径”的异常。 我可
我想检查一下我的客户是否断开了连接。根据我的研究,一种可能的方式是我可以继续给客户写信。如果客户端未能接收到消息,则表示已断开连接。我向相应的客户端发送消息“Checking Connection:Client”clientNo。 我将clientNo 1连接到服务器,它接收 客户1 但是当我将另一个客户端连接到服务器时,我的clientNo1停止接收来自服务器的消息,我的clientNo2现在将