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(); } }
楼主,不明白你要问什么呀。什么叫“为什么直接用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];
看你具体需求,如果传输文本内容,用字符流系列;如果传二进制文件,用字节流系列;传输序列化的对象,用对象流为什么直接用InputStream类和OutputStream不行了?
因为InputStream类和OutputStream是抽象类,不能直接用
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();
}
}}
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();
}
}
你要与客户端通讯当然是在服务器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等等。