问题一 URL 发信息时和Socket ,DatagramSocket 有什么区别 
URL 是主要针对什么的问题二URL 用PrintStream 包装后 发送给服务器程序了  那服务器怎么接受PrintStream 的参数
我这个地方有点晕 
URL url=new URL("http://localhost:8080/Test.class"); 我这个发送地址可以是个java类吗
要是可以的话 那怎么编才能接收那 我将 两个类都放到tomcat中也不好使  一个类是URL url=new URL("http://localhost:8080/Test.class"); 
一个类是 URL url=new URL("http://localhost:8080/U.class");结果是错误 java.net.ProtocolException: cannot write to a URLConnection if doOutput=false - call setDoOutput(true)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source)
at testurl.URl.main(URl.java:14)我自己是瞎写的没什么依据 可能根本不对一个是 
import java.net.*;
import java.io.*;
public class U {public static void main(String[] args) {
       try
       {
URL url=new URL("http://localhost:8080/Test.class"); 
String line;
int data[]={1,2,3,4,5};

URLConnection connection =url.openConnection();
PrintStream outStream=new PrintStream(connection.getOutputStream());
outStream.print(data);

outStream.close();
DataInputStream in=new DataInputStream(connection.getInputStream());

while((line=in.readLine())!=null)
{
System.out.println(line);
    
}
in.close();

        }
       catch(Exception e){e.printStackTrace();}
}
}
一个是
import java.net.*;
import java.io.*;
public class Test {public static void main(String[] args) {
       try
       {
URL url=new URL("http://localhost:8080/u.class"); 
URLConnection connection =url.openConnection();
DataInputStream in=new DataInputStream(connection.getInputStream());
PrintStream outStream=new PrintStream(connection.getOutputStream());
int[] data=new int[5];
int[] a=new int[5];
for(int i=0;i<5;i++)
{
     data[i]=in.readInt();
}
in.close();
for(int j=0;j<5;j++)
{
a[j]=data[4-j];
}

outStream.print(a);

outStream.close();



in.close();

        }
       catch(Exception e){e.printStackTrace();}
}
}

解决方案 »

  1.   

    HTTP 协议的 URLConnection 内部用的就是 Socket。毕竟 HTTP 是建立在 TCP 的 Socket 通信基础之上的。DatagramSocket 是基于 UDP 协议的,与基于 TCP 的 Socket 在协议上有着不同。
      

  2.   

    URL 发信息时和Socket ,DatagramSocket 有什么区别  
    URL 是主要针对什么的
    URL本质还是一个对象,可以通过socket传输是因为实现了序列化接口,注意看API的介绍哦URL 用PrintStream 包装后 发送给服务器程序了 那服务器怎么接受PrintStream 的参数
    这个问题的问法有点小问题,接收的是数据不是参数
    PrintStream是包装流,继承FilterOutputStream,既然是输出流那么接收自然是用输入流
    这里推荐你用ObjectInputStream,直接调用 readObject()方法就可以接收到URL对象了,不过记得强转一下就可以用了URL url=new URL("http://localhost:8080/Test.class"); 我这个发送地址可以是个java类吗
    不是很清楚你所谓的java类是什么意思,如果你想说构造参数是一个java对象,那是可以的,比如你这里就是传了一个String对象进去,但是要注意URL的构造参数不是Object的所以不是什么对象都能往里放下面是URL的构造方法
    URL(String spec) 
              根据 String 表示形式创建 URL 对象。 
    URL(String protocol, String host, int port, String file) 
              根据指定 protocol、host、port 号和 file 创建 URL 对象。 
    URL(String protocol, String host, int port, String file, URLStreamHandler handler) 
              根据指定的 protocol、host、port 号、file 和 handler 创建 URL 对象。 
    URL(String protocol, String host, String file) 
              根据指定的 protocol 名称、host 名称和 file 名称创建 URL。 
    URL(URL context, String spec) 
              通过在指定的上下文中对给定的 spec 进行解析创建 URL。 
    URL(URL context, String spec, URLStreamHandler handler) 
              通过在指定的上下文中用指定的处理程序对给定的 spec 进行解析来创建 URL 
    要是可以的话 那怎么编才能接收那  
    openStream() 或者openConnection().getInputStream()