Axe*_*ini 0 java sockets android connect
我是Java的初学者,我想在台式PC上创建服务器(运行外部IP地址,已验证),并在带有CM11的Samsung Galaxy S3上创建客户端。在服务器上:我在端口6666上创建了一个ServerSocket(不要问为什么),并在while()中创建了Socket(server = .accept();)。
在客户端上:我创建了一个Socket客户端(client = new Socket(HostName,port);),并将其放置在try {} catch(){}中:如果连接失败,应用程序将显示在TextView“服务器已关闭进行维护”。
错误:我什至无法连接到我的服务器,但是外部IP可以通过终端仿真器进行ping操作...我不知道为什么。我的客户端,服务器上是否有错误,还是我需要在清单(android)中添加权限?(应用运行时,Android不会在控制台中返回任何错误)-
任何的想法?这就是为什么我不想显示应用程序的名称。
服务器:
package <HIDDEN>;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class MainClass {
public static final String version ="0.1A";
public static final int port = 6666;
private static ServerSocket Service;
private static DataInputStream fromClient;
private static DataOutputStream toClient;
private static Socket server;
static InetAddress Host;
public static void main(String[] args) {
System.out.println("Welcome to <HIDDEN>'s Server! Version ## "+version+" ##");
try {
Service = new ServerSocket(port); // INITIALIZE SERVER SOCKET
System.out.println("Socket created at "+Service.getInetAddress()+" ");
} catch (IOException e) {
System.err.println("Error While Creating ServerSocket ' Service ' !!!\n");
e.printStackTrace();
}
while(true) {
try {
server = Service.accept();
System.out.println("Opened Socket on ");
if(server != null ) {System.out.println("ACCEPTING CONNECTION!");}
fromClient = new DataInputStream(server.getInputStream()); // INITIALIZE AND ACCEPT SOCKET
toClient = new DataOutputStream(server.getOutputStream()); // CONNECTION AND STREAMS
toClient.writeBoolean(com.<HIDDEN>.FileLoader.verifyLogger(String.valueOf(fromClient.readChar())));
} catch(IOException e) {
System.err.println("Error While Initializing A Dialog With Client! "+ "\033FATAL ERROR\033");
e.printStackTrace();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
客户端:[仅JAVA文件]
package <HIDDEN>;
import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutput;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class login_activity extends Activity {
public static String username, password;
public static final String HostName = "84.227.165.225";
public static final int port = 6666;
private Socket client;
private DataOutputStream toServer;
private DataInputStream fromServer;
@Override
protected void onCreate(Bundle savedInstanceState) { /*ONCREATE VOID*/
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
}
public void Login(View view) {
EditText username_et = (EditText) findViewById(R.id.username_et); // EditTexts
EditText password_et = (EditText) findViewById(R.id.password_et); //---
TextView instructions_tw = (TextView) findViewById(R.id.instructions_tw);
password = password_et.getText().toString();
username = username_et.getText().toString();
try {
client = new Socket(HostName, port); //INITIALIZE SOCKET
System.out.print("Initialized Socket, connecting to Server "+HostName+":"+port+"\n");
toServer = new DataOutputStream(client.getOutputStream()); //System.out.print doesn't works on android...
}catch (Exception UnkownHostException) {
instructions_tw.setText("Please Log In Or Register To <NOPE, LOL>\n\n!! THE SERVER IS DOWN FOR MAINTENANCE");
}
try {
toServer.writeBytes(username+"???"+password);
fromServer = new DataInputStream(client.getInputStream());
boolean accepted = false;
if(fromServer.readBoolean()) {
Intent i = new Intent(this, mainmenu_activity.class);
startService(i);
} else {instructions_tw.setText("Please Log In Or Register To <HIDDEN>\n\n!! UNCORRECT PASSWORD OR USERNAME");}
/* THE CODE IS NEVER GOING TO THIS WAY ;( */
}catch(Exception UnkownHostException){
}
}
}
Run Code Online (Sandbox Code Playgroud)
感谢帮助
我认为您需要向INTERNET清单文件中添加权限,以便能够使用来自android的网络套接字。
Android文档说:
INTERNET允许应用程序打开网络套接字。
您应该在清单文件中添加以下内容:
<uses-permission android:name="android.permission.INTERNET" />
Run Code Online (Sandbox Code Playgroud)
添加-还请确保可以从Android设备访问服务器:服务器和设备都应位于同一网络(WiFi连接)中,或者应该可以从Internet访问服务器。
| 归档时间: |
|
| 查看次数: |
1021 次 |
| 最近记录: |