java的网络编程,创建SeverSocket如何使用?用什么类型的输入输出流?为什么直接用InputStream类和OutputStream不行了?最好可以提供一个简单的网络连接的代码……谢谢了

解决方案 »

  1.   

    创建SeverSocket如何使用?创建后处在监听状态,等待其他Socket来踹门。用什么类型的输入输出流?
    看你具体需求,如果传输文本内容,用字符流系列;如果传二进制文件,用字节流系列;传输序列化的对象,用对象流为什么直接用InputStream类和OutputStream不行了?
    因为InputStream类和OutputStream是抽象类,不能直接用
      

  2.   

    给你一个对象流package com;import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.net.Socket;
    import java.util.Hashtable;public class ObjClient { /**
     * @param args
     * @throws IOException 
     * @throws ClassNotFoundException 
     */
    public static void main(String[] args) throws IOException, ClassNotFoundException {
    // TODO Auto-generated method stub
    Socket socket=new Socket("127.0.0.1",1234);
    ObjectInputStream ois=new ObjectInputStream(socket.getInputStream());
    Hashtable hash=(Hashtable)ois.readObject();
    System.out.println(hash);
    System.out.println("dog is "+hash.get("Dog"));
    ois.close();
    socket.close();
    }}
    package com;import java.io.IOException;
    import java.io.ObjectOutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.Hashtable;public class ObjServer { /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub
    ServerSocket serverSocket=new ServerSocket(1234);
    Hashtable hash=new Hashtable();
    hash.put("Dog", "yyy");
    hash.put("Cat", "Lacey");

    while(true){
    System.out.println("Listen");
    Socket socket=serverSocket.accept();

    ObjectOutputStream ostream=new ObjectOutputStream(socket.getOutputStream());
    ostream.writeObject(hash);
    ostream.close();
    socket.close();
    }
    }}
      

  3.   

    再给你一个例子package com;import java.io.IOException;
    import java.io.PrintStream;
    import java.net.ServerSocket;
    import java.net.Socket;public class BearServer {
    public static void main(String []args) throws IOException{
    ServerSocket ssock=new ServerSocket(1234);
    System.out.println("Listening");
    Socket sock=ssock.accept();
    ssock.close();

    PrintStream pstream=new PrintStream(sock.getOutputStream());
    for(int i=100;i>=0;i--){
    pstream.println(i+" bottles of beer on the wall");
    }
    pstream.close();
    sock.close();
    }
    }
    package com;import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.net.ServerSocket;
    import java.net.Socket;public class BeerServer {
    public static void main(String []args) throws IOException{
    ServerSocket serverSocket=new ServerSocket(1234);
    System.out.println("Listen!");
    Socket socket=serverSocket.accept();
    serverSocket.close();

    PrintStream pstream=new PrintStream(socket.getOutputStream());

    pstream.print("count?");

    BufferedReader input=new BufferedReader(new InputStreamReader(socket.getInputStream()));

    String line=input.readLine();
    pstream.println("");
    int count=Integer.parseInt(line);
    for(int i=0;i<count;i++){
    pstream.println(i+" bottle of beer on the wall");
    }
    pstream.close();
    socket.close();
    }
    }
      

  4.   

    楼主,不明白你要问什么呀。什么叫“为什么直接用InputStream类和OutputStream不行了?”
    你要与客户端通讯当然是在服务器accept()方法获得Client连接以后,创建并返回一个Socket的实例,使用返回的Socket实例的InputStream和OutputStream与该Client进行通信:import java.net.*;
    import java.io.*;public class TCPSimpleServer{

    private static final int BUFSIZE = 32;

    public static void main(String[] args) throws IOException{

    ServerSocket server = new ServerSocket(8000);
    int recvMsgSize;
    byte[] receiveBuf = new byte[BUFSIZE];

    while(true){
    Socket clientSocket = server.accept();//等待Cilent端的链接,无链接的情况下阻塞
    InputStream in = clientSocket.getInputStream();
    OutputStream os = clientSocket.getOutputStream();
    //接受Client端的数据
    while((recvMsgSize = in.read(receiveBuf)) != -1){
    os.write(receiveBuf, 0, recvMsgSize);
    }
    clientSocket.close();
    }
    }
    }网络中,应用层都是通过Socket来互相收发数据的。默认下的Socket是基于TCP协议的,还有基于UDP这种无连接状态的协议对应的socket是DatagramSocket等等。