2015-04-25 2 views
-1

Я пишу программу клиентского сервера. все работает, кроме этой части. глядя на мой код, я узнал, что сервер не получает идентификатор пользователя, отправленный клиентом. проблема заключается либо в outToServer.writeInt(uid); or in uid = din.readInt();.WriteInt не отправляет целое число

спасибо.

Вот код для части сервера:

if("Create Event".equals(command)){  
    String eventnametxt = datain.readLine(); 
    System.out.println(eventnametxt); 
    String location = datain.readLine(); 
    System.out.println(location); 
    String description = datain.readLine(); 
    System.out.println(description); 
    String startdate = datain.readLine(); 
    System.out.println(startdate); 
    DataInputStream din = new DataInputStream(socket.getInputStream()); 

    String enddate = datain.readLine(); 
    System.out.print(enddate); 
    uid = din.readInt(); 
    System.out.print(uid); 
    //get the fullname of the user creating the event 
    condition = "userid = "+uid; 
    String Creator = jdbc.SelectLogIn("fullName", "users", condition); 
    //insert the record in the database 
    String Fields = "EventName,Location,Description,Creator,userid,StartDate,EndDate"; 
    String Values = "'" + eventnametxt + "','" + location + "','" + description + "','" + Creator + "'," + uid + ",'" + startdate + "','" + enddate + "'"; 
    jdbc.Insert("events", Fields, Values); 
    dataout.writeBytes("Event Successfully Created!!\n"); 
} 

и это код со стороны клиента :

command = "Create Event"; 

try{ 
    clientSocket = new Socket("localhost", 6555); 
    inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
    DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); 
    //inform the server that user is creating an event 
    outToServer.writeBytes(command + '\n'); 
    //send the information for the event 
    outToServer.writeBytes(eventnametxt.getText() + '\n'); 
    outToServer.writeBytes(locationtxt.getText() + '\n'); 
    outToServer.writeBytes(Eventdescription.getText() + '\n'); 
    outToServer.writeBytes(startdt.getDate().toString() + '\n'); 
    outToServer.writeBytes(enddt.getDate().toString()+'\n'); 
    // send the userid corresponding to the person logged in and creating the event 
    outToServer.writeInt(uid); 
    System.out.print(" "+uid+'\n'); 

    response = inFromServer.readLine(); 
    System.out.print("server response: "+response); 
    if("Event Successfully Created!!".equals(response)){ 
     JOptionPane.showMessageDialog(null, response, "InfoBox: " + "Response", JOptionPane.INFORMATION_MESSAGE); 
     outToServer.writeBytes("Event Added"+'\n'); 
     this.dispose(); 
    } 
}catch (IOException ex){ 
    Logger.getLogger(EventsFrame.class.getName()).log(Level.SEVERE, null, ex); 
} 

ответ

0

Согласно кода сервера, вы чтение ваших строк из «datain», но ваш uid из «сокета».

+0

я читаю строки, используя буферный читатель и целые числа, используя DataInputStream – smn14

+0

Вы должны читать их точно по таким же образом, как вы пишете их , Вы написали все (также укусы) с DataOutputStream, вы должны прочитать все (также укусы) с DataInputStream (сохраняя порядок), –

0

Вы можете использовать ObjectInputStream и ObjectOutputSteam вместо DataInputStream и DataOutputSteam. Он заботится о ваших объектах Serializable, таких как String и Date, с помощью writeObject() и readObject(). И вам не нужно преобразовывать эти вещи в String и поместить \ n в конец, чтобы читать его с помощью readLine() позже. Эти классы также поддерживают базовые типы, такие как int с writeInt() и readInt(). http://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html
сервера код сторона:

package test; 

import java.io.BufferedInputStream; 
import java.io.BufferedOutputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.util.Date; 

public class MyServer { 

    public static void main(String[] args) throws IOException { 
     ServerSocket listener = new ServerSocket(6555); 
     try { 
      while (true) { 
       Socket socket = listener.accept(); 
       try { 
        //This code should go to a thread for async processing 
        ObjectInputStream oIn = new ObjectInputStream(new BufferedInputStream(socket.getInputStream())); 
        ObjectOutputStream oOut = new ObjectOutputStream(new BufferedOutputStream(socket.getOutputStream())); 
        process(oIn, oOut); 
       } finally { 
        socket.close(); 
       } 
      } 
     } finally { 
      listener.close(); 
     } 
    } 

    private static void process(ObjectInputStream datain, ObjectOutputStream dataout) { 
     try { 
      String command = (String) datain.readObject(); 
      if ("Create Event".equals(command)) { 
       String eventnametxt = (String) datain.readObject(); 
       System.out.println(eventnametxt); 
       String location = (String) datain.readObject(); 
       System.out.println(location); 
       String description = (String) datain.readObject(); 
       System.out.println(description); 
       Date startdate = (Date) datain.readObject(); 
       System.out.println(startdate); 

       Date enddate = (Date) datain.readObject(); 
       System.out.println(enddate); 
       int uid = datain.readInt(); 
       System.out.println(uid); 

       // JDBC part comes here ... 

       dataout.writeObject("Event Successfully Created!!"); 
       dataout.flush(); // This will send 'Event Successfully Created!!' to client 

       String confirmation = (String) datain.readObject(); 
       System.out.println(confirmation); 
      } 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 


стороне клиента код:

package test; 

import java.io.BufferedInputStream; 
import java.io.BufferedOutputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.net.Socket; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

import javax.swing.JOptionPane; 

public class MyClient { 

    public static void main(String[] args) throws ParseException { 
     String eventnametxt = "Education"; 
     String locationtxt = "Classroom"; 
     String Eventdescription = "Math"; 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 
     Date startdt = sdf.parse("2015-04-27 08:00"); 
     Date enddt = sdf.parse("2015-04-27 09:00"); 
     int uid = 100; 

     String command = "Create Event"; 
     Socket clientSocket = null; 
     try { 
      clientSocket = new Socket("localhost", 6555); 
      ObjectOutputStream outToServer = new ObjectOutputStream(new BufferedOutputStream(clientSocket.getOutputStream())); 
      // inform the server that user is creating an event 
      outToServer.writeObject(command); 
      // send the information for the event 
      outToServer.writeObject(eventnametxt); 
      outToServer.writeObject(locationtxt); 
      outToServer.writeObject(Eventdescription); 
      outToServer.writeObject(startdt); 
      outToServer.writeObject(enddt); 
      // send the userid corresponding to the person logged in and 
      // creating the event 
      outToServer.writeInt(uid); 
      outToServer.flush(); // This will send everything to server in one step 

      ObjectInputStream inFromServer = new ObjectInputStream(new BufferedInputStream(clientSocket.getInputStream())); 
      String response = (String) inFromServer.readObject(); 
      System.out.print("server response: " + response); 
      if ("Event Successfully Created!!".equals(response)) { 
       JOptionPane 
         .showMessageDialog(null, response, "InfoBox: " + "Response", JOptionPane.INFORMATION_MESSAGE); 
       outToServer.writeObject("Event Added"); 
       outToServer.flush(); // This will send 'Event Added' to server 
      } 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 


Сервер вывода консоли после запуска:

Education 
Classroom 
Math 
Mon Apr 27 08:00:00 CEST 2015 
Mon Apr 27 09:00:00 CEST 2015 
100 
Event Added 


Клиент выводит на консоль после запуска:

server response: Event Successfully Created!! 
+0

Я пробовал это, но это не сработало. пожалуйста, помогите моему проекту в понедельник, и я потерял два дня, чтобы узнать, в чем проблема. спасибо – smn14

+0

См. мой отредактированный ответ. –

+0

не работает. по какой-то причине клиент только сейчас выполняет печать клиента, а затем ничего не выполняет, и сервер будет печатать принятое соединение, но ничего не происходит. его как программа застревает в цикле, и я не могу ее найти. – smn14

Смежные вопросы