我用于套接字通信的代码在命令提示符下运行的程序中工作,但是当在嵌入网页的applet中使用相同的代码时,存在安全问题。它不连接...... 请帮帮我,需要在3天内完成这个.... 服务器:
public void run()
{
try
{
ServerSocket s1 = new ServerSocket(5555); // create a server socket and bind it to port number.
Socket s2 = s1.accept(); // make the server listen for a connection.
DataInputStream in = new DataInputStream(s2.getInputStream());
PrintStream out = new PrintStream(s2.getOutputStream());
while(true)
{
char[] buf = new char[150];
String line = in.readUTF(); // wait for the client to send a line of text.
if(line.equals("send"))
{
for(int i=0;i<150;i++)
buf[i]=0;
if(Traffic1.s1wiut) buf[0]='1';
if(Traffic1.s1wist) buf[1]='1';
if(Traffic1.s1wirt) buf[2]='1';
if(Traffic1.s1silt) buf[3]='1';
if(Traffic1.s1siut) buf[4]='1';
if(Traffic1.s1sirt) buf[5]='1';
}
String line1 = new String(buf);
out.println(line1); // send the data to the client.
out.flush(); // flush the stream to ensure that the data reaches the other end.
}
}
客户方:
public void run()
{
while(true)
{
int serverPort = 5555; // port number on which the server is listening.
try
{
InetAddress ipAddress = InetAddress.getLocalHost(); // create an object that represents the above IP address.
Socket socket = new Socket(ipAddress,serverPort); // create a socket with the server's IP address and server's port.
DataInputStream in = new DataInputStream(socket.getInputStream());
PrintStream out = new PrintStream(socket.getOutputStream());
while(true)
{
char[] buf = new char[150];
String line = "send"; // request string to send to server.
out.println(line); // send the above line to the server.
out.flush(); // flush the stream to ensure that the data reaches the other end.
line = in.readUTF(); // wait for the server to send a line of text.
buf = line.toCharArray();
if(buf[0]=='1') s1wiut=true; else s1wiut=false;
if(buf[1]=='1') s1wist=true; else s1wist=false;
if(buf[2]=='1') s1wirt=true; else s1wirt=false;
if(buf[3]=='1') s1silt=true; else s1silt=false;
if(buf[4]=='1') s1siut=true; else s1siut=false;
if(buf[5]=='1') s1sirt=true; else s1sirt=false;
repaint();
Thread.sleep(1000);
}
}
可以采取哪些措施来解决这个问题?
答案 0 :(得分:2)
无符号小程序只能连接到加载的主机。
您的小程序尝试连接到“localhost”。所以服务器也必须在localhost上运行。是吗?你是如何安排的?
您正在使用readUTF()
进行阅读,但要println()
进行阅读。那不行。 println()
需要readLine()
,readUTF()
需要writeUTF()
。
答案 1 :(得分:0)
您可以发布您遇到的错误吗?即使是与安全相关的问题
一个小建议:
我认为您需要更改服务器代码,如下所示(因为服务器总是监听接受客户端套接字)
public void run()
{
try
{
ServerSocket s1 = new ServerSocket(5555); // create a server socket and bind it to port number.
while(true){
Socket s2 = s1.accept(); // make the server listen for a connection.
DataInputStream in = new DataInputStream(s2.getInputStream());
PrintStream out = new PrintStream(s2.getOutputStream());
while(true)
{
char[] buf = new char[150];
String line = in.readUTF(); // wait for the client to send a line of text.
if(line.equals("send"))
{
for(int i=0;i<150;i++)
buf[i]=0;
if(Traffic1.s1wiut) buf[0]='1';
if(Traffic1.s1wist) buf[1]='1';
if(Traffic1.s1wirt) buf[2]='1';
if(Traffic1.s1silt) buf[3]='1';
if(Traffic1.s1siut) buf[4]='1';
if(Traffic1.s1sirt) buf[5]='1';
}
String line1 = new String(buf);
out.println(line1); // send the data to the client.
out.flush(); // flush the stream to ensure that the data reaches the other end.
}
} // end of while
}
您的客户如下所示
public void run()
{
int serverPort = 5555; // port number on which the server is listening.
try
{
InetAddress ipAddress = InetAddress.getLocalHost(); // create an object that represents the above IP address.
Socket socket = new Socket(ipAddress,serverPort); // create a socket with the server's IP address and server's port.
DataInputStream in = new DataInputStream(socket.getInputStream());
PrintStream out = new PrintStream(socket.getOutputStream());
while(true)
{
char[] buf = new char[150];
String line = "send"; // request string to send to server.
out.println(line); // send the above line to the server.
out.flush(); // flush the stream to ensure that the data reaches the other end.
line = in.readUTF(); // wait for the server to send a line of text.
buf = line.toCharArray();
if(buf[0]=='1') s1wiut=true; else s1wiut=false;
if(buf[1]=='1') s1wist=true; else s1wist=false;
if(buf[2]=='1') s1wirt=true; else s1wirt=false;
if(buf[3]=='1') s1silt=true; else s1silt=false;
if(buf[4]=='1') s1siut=true; else s1siut=false;
if(buf[5]=='1') s1sirt=true; else s1sirt=false;
repaint();
Thread.sleep(1000);
}
}catch(Exception e){
}