我的项目基本上是客户端向服务器发送一个号码。它计算然后使用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)数据类型问题不匹配......解决方案是转换
我的朋友正在做客户.....这是另一个故事
答案 0 :(得分:0)
使用,
回复=将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:你对字符串进行数学运算,这是不可能的。