在java中将客户端服务器套接字中的字符串转换为int

时间:2014-03-16 12:29:57

标签: java sockets math

我的项目基本上是客户端向服务器发送一个号码。它计算然后使用TCP

将值返回给客户端

有三个部分:

a)给定数字的乘积和。 b)执行字符串操作。 (查找,反向字符串,拆分字符串) 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)为什么在我将它们作为整数启动时会产生一个错误,说A B C D是字符串?

Q2)是我的转换正确....我觉得它不是!

案例2

Q1)我真的觉得它是如此复杂,即使我从互联网上阅读代码,任何帮助简化它? 也许为每个人做一个单独的案子?

案例3

Q1)数据类型问题不匹配......解决方案是转换

我的朋友正在做客户.....这是另一个故事

2 个答案:

答案 0 :(得分:0)

你声明了 字符串a,b,c,d;
并做回复=(a * b)+(c * d); //你不能对字符串&#39进行所有算术运算

使用,
回复=将String.valueOf((NUM1 * NUM2)+(NUM3 * num4));

答案 1 :(得分:0)

我建议你修改你的程序。既然你想发送字符串和整数,我首先要实现一个容器类。

像实现Serializable的Message<T>一样。通过这种方式,您可以轻松地来回发送数据。然后,您应该使用ObjectOutput / InputStream,而不是使用DataInput / OutputStream,在我看来更容易。

同样,我可以看到你尝试发送数据报包,但你使用的是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:你对字符串进行数学运算,这是不可能的。