我有这段代码来连接服务器和客户端,我需要将json对象发送到android studio客户端,但是printwriter行中描述的方法有错误,我不知道问题出在哪里,请查看代码并帮助我
public class Servidor {
ServerSocket servidor=null;
Socket socket=null;
BufferedReader lector=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();
}
}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(){
RegUser registrar=new RegUser();
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")){
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(final String dato){
Thread escribir_hilo=new Thread(new Runnable(){
public void run(){
try{
escritor= new PrintWriter(socket.getOutputStream());
escritor.println(dato);
}catch(Exception ex){
ex.printStackTrace();
}
}
});
escribir_hilo.start();
}
还有这个
public class RegUser {
Gson gson = new Gson();
ListaEnlazada listaUsuarios;
Comparar comparar=new Comparar();
public RegUser(){
}
public void newUser(JsonElement elemento) throws IOException{
Servidor respuesta=new Servidor();
//respuesta=new Servidor();
String user=elemento.getAsJsonObject().get("nombre").getAsString();
//boolean result=comparar.UserComp(user);
if(true){
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);
respuesta.escribir(enviar_mensaje);
}
错误是
java.lang.NullPointerException
at Servidor$3.run(Servidor.java:81)
at java.lang.Thread.run(Thread.java:745)
我在通过套接字将数据写入客户端时出错,错误在getOutputStream中
1) 一旦服务器套接字接受连接,就会为客户端创建新的套接字。
2) 现在将这个套接字作为参数传递给leer()方法。不要将其作为成员变量存储在Servidor中。您必须在服务器端的许多套接字上进行操作。把工作交给leer()方法
下面的代码应该从
socket=servidor.accept();
leer();
到
socket=servidor.accept();
leer(socket);
您需要更改leer()方法的签名以接受socket作为参数:public void leer(socket socket)
编辑:
3)在对其采取行动之前,确保Socket处于相关方法的正确状态。您可以通过跨方法传递Socket或传递一些唯一的Id来实现它,这可以检索Socket。
e、 g.如果用唯一字符串Id(键)和套接字(值)的ConcurrentNHashmap替换主类中的套接字,并通过跨类和方法传递套接字Id来检索套接字。
看看Socket编程的工作示例
套接字
是null
,因为您没有设置它。
在尝试使用套接字之前,您需要确保已创建套接字。
问题内容: 我是Java的初学者,我正在尝试创建一个在光标所在的位置绘制一个矩形的应用程序。我已经完成了所有操作,但无法获得重绘的信息。如果没有重绘,则矩形仅绘制一次,仅此而已。使用重新绘制,它可以很好地编译,但是当我运行它时,每次移动鼠标时,都会出现这个大错误。 所以,有人可以帮我吗? 问题答案: 希望代码示例中的注释能够告诉您您在代码中做错了什么:-),否则总有理由提出您的疑问…
问题内容: 根据运行时错误消息,异常发生在下一行; 是具有构造函数和重载构造函数的类,其中包含有关数据库中每种病毒的特定信息,例如; 字符串vName 字符串vDefinition 重载 具有标记化定义的数组(以xLength组分隔) 具有LCS令牌的阵列 有等级浮动 类型的是.iterator(),如下所示: 是和ArrayList类型,用于存储病毒对象 (此时为名称和定义), 以便以后使用。
主要内容:1 什么是Java PrintWriter,2 Java PrintWriter的语法,3 Java PrintWriter的方法,4 Java PrintWriter的例子1 什么是Java PrintWriter Java PrintWriter类是Writer类的实现。它用于将格式化的对象表示形式打印到文本输出流。 2 Java PrintWriter的语法 3 Java PrintWriter的方法 方法 描述 PrintWriter append(char c) 输出指定的布
本文向大家介绍Java xml出现错误 javax.xml.transform.TransformerException: java.lang.NullPointerException,包括了Java xml出现错误 javax.xml.transform.TransformerException: java.lang.NullPointerException的使用技巧和注意事项,需要的朋友参考一
我试图使用javamail示例包中的ShowMsg.java读取gmail消息,但在运行时不断出现此错误。虽然程序编译得很好。 以下是错误消息: 我运行的命令是,编译它的命令是。javax.mail.jar包含在lib文件夹中 这是一些更短的替代代码,并得到相同的错误:
问题内容: 当前在WTForms中访问错误,您必须像这样遍历字段错误: 由于我正在构建一个不使用任何表单视图的rest应用程序,因此我不得不检查所有表单字段以查找错误所在。 有没有办法可以做类似的事情: 问题答案: 实际对象的属性包含字典中的字段名称及其错误。因此,您可以执行以下操作: