преобразование строки в int в сокете клиентского сервера в Java

1

мой проект в основном клиент отправляет номер на сервер. он вычисляет, затем возвращает значение клиенту, используя TCP

существует три раздела:

a) Сумма произведения заданных чисел. b) Выполнение строковых операций. (Find, Reverse String, Split String) c) Отображение 10 простых чисел.

Я действительно застрял в этом... Я начал с сервера

import java.io.*;
 import java.net.*; 
import java.math.*;
 public class G3server {

     public static void main(String args[]) throws SocketException, IOException

     { 



            System.out.println("Waiting for Connection Request ................"); 
            ServerSocket server=new ServerSocket(100); 
            Socket client= server.accept(); 
            System.out.println("Connected to Client ................"); 
            DataInputStream dis= new DataInputStream(System.in);
             DataInputStream din= new DataInputStream(client.getInputStream());
              DataOutputStream dout= new DataOutputStream(client.getOutputStream()); 


      String choice,reply; 
do { 

choice=din.readUTF();
 switch(choice) {
  //sum of product 
   case "1":

       byte z[]=new byte[10];
      DatagramPacket dpack=new DatagramPacket(z, z.length);
       String s;

     String a,b,c,d;


      server.receive(dpack);
       s=new String(dpack.getData(), 0, dpack.getLength());
       int num1= Integer.parseInt(s);


         server.receive(dpack);   
       s=new String(dpack.getData(), 0, dpack.getLength());
       int num2= Integer.parseInt(s);

 server.receive(dpack);

       s=new String(dpack.getData(), 0, dpack.getLength());
       int num3= Integer.parseInt(s);

 server.receive(dpack);
       s=new String(dpack.getData(), 0, dpack.getLength());
       int dnum4= Integer.parseInt(s);

        reply=(a*b)+(c*d);

 z= (String.toInteger(reply)).getBytes();  

       dpack = new DatagramPacket(z, z.length, dpack.getAddress(), dpack.getPort()); 

 dout.writeUTF(reply);

              break;

// string operations


 case "2": /*

 bid=din.readUTF();

  sid=din.readUTF(); 

      dout.writeUTF(reply);
     break;
     */
     //Primes

     case "3":

       int i;
       String n;

     n=din.readUTF();

     for (i = 2; i <= n/2; i++) 


       { if (n/ i == 0) {


      reply="The number is not prime";



          break; } }

        reply="The number is prime";


          dout.writeUTF(reply);

  break; 
 case "4":

  System.out.println("Client Disconnected");
  break; } }
  while(!choice.equals("4"));

   } }

оставить дело 2 и 3 и 4 на данный момент!

в случае 1

Q1) почему возникает ошибка, говорящая о том, что ABCD являются строками, а я инициировал их как целые числа?

Q2) - это мое преобразование правильно.... Я чувствую, что это не так!

случай 2

Q1) Я действительно чувствую, что это так сложно, хотя я читаю коды из Интернета, любую помощь в его упрощении? может быть, отдельный случай для каждого?

случай 3

Q1) несовместимые проблемы с типом данных... решение заключается в преобразовании

клиент мой друг делает это..... это еще одна история

Теги:
math
sockets

2 ответа

0

Я бы предложил вам изменить свою программу на litte. поскольку вы хотите отправлять строки и целые числа, я бы начал с реализации контейнерного класса.

как Message<T> которое реализует Serializable. Таким образом вы можете легко отправлять данные взад и вперед. Затем, вместо использования DataInput/OutputStream, вы должны использовать ObjectOutput/InputStream, что делает его проще, на мой взгляд.

также, насколько я вижу, вы пытаетесь отправить пакеты датаграмм, но вы используете TCP-соединение, которое не работает, поскольку datagrampackets используются для UDP-соединения (без подключения)

имеют на взгляде эти характеристики:

http://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html

http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html

Я думаю, что метод readUTF() также устарел, насколько я помню.

Q1: вы выполняете математические операции над строкой, это невозможно.

0

вы заявили
Строка a, b, c, d;
и выполняем ответ = (a * b) + (c * d);//вы не можете выполнить всю арифметическую операцию на строках

использовать,
ответ = String.valueOf((num1 * пит2) + (num3 * Num4));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню