мой проект в основном клиент отправляет номер на сервер. он вычисляет, затем возвращает значение клиенту, используя 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) несовместимые проблемы с типом данных... решение заключается в преобразовании
клиент мой друг делает это..... это еще одна история
Я бы предложил вам изменить свою программу на 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: вы выполняете математические операции над строкой, это невозможно.
вы заявили
Строка a, b, c, d;
и выполняем ответ = (a * b) + (c * d);//вы не можете выполнить всю арифметическую операцию на строках
использовать,
ответ = String.valueOf((num1 * пит2) + (num3 * Num4));