服务器 - 与套接字的客户端通信Java
问题描述:
我有这个代码在eclipse中与服务器在android studio中的客户端进行通信,我使用套接字,客户端发送消息到服务器,服务器读取消息并确定一切正常,但是当服务器向客户端发送消息时,客户端不会收回任何东西;这是代码服务器 - 与套接字的客户端通信Java
public class Servidor {
ServerSocket servidor=null;
String funcion;
public static Socket socket;
BufferedReader lector=null;
RegUser registrar=null;
PrintWriter escritor=null;
Gson gson = new Gson();
public Servidor(){
}
public static void main(String[] args) {
Servidor server=new Servidor();
server.iniciarHilo();
}
public void iniciarHilo(){
Thread principal=new Thread(new Runnable(){
public void run(){
try{
servidor=new ServerSocket(8080);
while(true){
socket=servidor.accept();
leer();
escribir();
}
}catch(Exception ex){
ex.printStackTrace();
}
}
});
principal.start();
System.out.println("Servidor iniciado......");
}
public void leer(){
Thread leer_hilo=new Thread(new Runnable(){
public void run(){
try{
lector=new BufferedReader(new InputStreamReader(socket.getInputStream()));
while(true){
JsonParser parser = new JsonParser();
String mensaje= lector.readLine();
JsonElement elemento = parser.parse(mensaje);
String mensaje_in=elemento.getAsJsonObject().get("tipo").getAsString();
if (lector==null){
System.out.println("Conexion Interrumpida....");
}
if (mensaje_in.equals("registrar")){
RegUser registrar=new RegUser();
System.out.println("Solicitud de Registro");
registrar.newUser(elemento);
}
else if (mensaje_in.equals("ingresar")){
System.out.println("Solicitud de Ingreso");
}
}
}catch(Exception ex){
ex.printStackTrace();
}
}
});
leer_hilo.start();
}
public void escribir(){
Thread escribir_hilo=new Thread(new Runnable(){
public void run(){
try{
escritor= new PrintWriter(socket.getOutputStream(),true);
escritor.println(funcion);
System.out.println(funcion);
}catch(Exception ex){
ex.printStackTrace();
}
}
});
escribir_hilo.start();
}
这
public class RegUser extends Servidor{
Gson gson = new Gson();
ListaEnlazada listaUsuarios;
Comparar comparar=new Comparar();
public RegUser(){
}
public void newUser(JsonElement elemento){
Servidor respuesta=new Servidor();
//respuesta=new Servidor();
String user=elemento.getAsJsonObject().get("nombre").getAsString();
if(comparar.UserComp(user)){
listaUsuarios=new ListaEnlazada();
listaUsuarios.add(elemento);
System.out.println(listaUsuarios.get(0));
JsonObject o = new JsonObject();
o.addProperty("tipo", String.valueOf("registro"));
o.addProperty("estado", String.valueOf("completo"));
String enviar_mensaje = gson.toJson(o);
funcion=enviar_mensaje.toString();
escribir();
}
else
{
JsonObject comp = new JsonObject();
comp.addProperty("tipo","registro");
comp.addProperty("estado","existe");
String comparar=gson.toJson(comp);
funcion=comparar.toString();
escribir();
}
}
此代码是服务器代码,如果你需要在客户端代码(Android Studio中),请告诉我。
我需要帮助,请
答
你不能有
public static Socket socket
在多客户端服务器架构服务器。服务器在“接受”方法中创建客户端套接字。
想想多个客户端连接到单个服务器的场景。如果您在服务器上有静态套接字,则它只能服务器套接字。那么如何处理连接到服务器的“N”个客户端呢?
在Servidor
删除静态套接字上创建套接字accept()方法之后,插座传递给
leer()
和escribir()
方法,这需要插座。
答
如果您能够在C#服务中托管你的服务器我已经创建了一个支持的连接1000的一个开源项目,包括保活协议(AKA心跳协议),认证模型,它可以很容易地扩展以及Java,Objective-C和C#API。该文档包括适用于Android,iOS和Windows Mobile的示例。你可以找到它here。
我可以使用公共Socket套接字; ?? –
这也不服务于目的。每个客户端应该有一个套接字。如果100个客户端连接到服务器,则服务器应该有100个套接字来处理每个客户端。 –
请参阅我的答案和评论http://stackoverflow.com/questions/32542152/java-error-with-a-printwriter –