同樣的代碼為什么我的報異常了
import java.io.*;
import java.net.*;
import java.net.Socket;
import org.omg.CORBA.portable.InputStream;
/**基于TCP協(xié)議的服務(wù)器端
?*
?*/
public class Server {
?public static void main(String[] args) {
??// TODO 自動生成的方法存根
??try {
???
???ServerSocket server=new ServerSocket(7001);
???//調(diào)用accept()方法偵聽,等待客戶端的鏈接
???System.out.println("服務(wù)器已啟動,等待客戶端的連接");
???Socket socket;
???int count=0;
???while(true) {
????socket=server.accept();
????ServerThread serverthread=new ServerThread(socket);
????serverthread.start();
????count++;
????System.out.println("客戶端的數(shù)量:"+count);
???}
} catch (IOException e) {
???// TODO 自動生成的 catch 塊
???e.printStackTrace();
??}
??
?}
}
import java.io.*;
import java.net.*;
//客戶端
public class Clien {
?public static void main(String[] args) {
??// TODO 自動生成的方法存根
??try {
???Socket socket=new Socket(InetAddress.getLocalHost()
?????,7001);
???//獲取輸出流,用于想服務(wù)器端發(fā)送信息
???OutputStream os=socket.getOutputStream();
???PrintWriter pw=new PrintWriter(os);//將字節(jié)輸出流包裝成打印流
???pw.write("用戶名:admin; 密碼:123");
???pw.flush();
???socket.shutdownOutput();//關(guān)閉輸出流
???//獲取輸入流,讀取服務(wù)端響應(yīng)
???InputStream is=socket.getInputStream();
???BufferedReader br=new BufferedReader(new InputStreamReader(is));
???String info=null;
???while((info=br.readLine())!=null) {
????System.out.println("我是客戶端,服務(wù)器說:"+info);
????
???}
???br.close();
???is.close();
???pw.close();
???os.close();
???socket.close();
??} catch (UnknownHostException e) {
???// TODO 自動生成的 catch 塊
???e.printStackTrace();
??} catch (IOException e) {
???// TODO 自動生成的 catch 塊
???e.printStackTrace();
??}
?}
}
import java.io.*;
import java.net.*;
public class ServerThread extends Thread {
?Socket socket;
?public ServerThread(Socket soket) {
??this.socket=socket;
?}
?public void run() {
??BufferedReader br=null;
??OutputStream os=null;
??PrintWriter pw = null;
??InputStreamReader isr=null;
??InputStream is=null;
??try {
???//獲取輸入流
???//is=socket.getInputStream();
???isr=new InputStreamReader(socket.getInputStream());
???br=new BufferedReader(isr);
???String info=null;
???while((info=br.readLine())!=null) {
????System.out.println("我是服務(wù)器,客戶端說:"+info);
???}
???socket.shutdownInput();
???
???//獲取輸出流。響應(yīng)客戶端
???os=socket.getOutputStream();
???pw=new PrintWriter(os);
???pw.write("歡迎您");
???pw.flush();
??} catch (IOException e) {
???// TODO 自動生成的 catch 塊
???e.printStackTrace();
??}finally {
???//必須要執(zhí)行的代碼
???//關(guān)閉資源
???try {
????if(pw!=null)
?????pw.close();
????if(os!=null)
?????os.close();
????if(br!=null)
?????br.close();
????if(isr!=null)
?????isr.close();
????//if(is!=null)
???//??is.close();
????if(socket!=null)
?????socket.close();
???} catch (IOException e) {
????// TODO 自動生成的 catch 塊
????e.printStackTrace();
???}
??}
??
?}
}
2019-02-16
ServerThread類中 ?//獲取輸入流
import org.omg.CORBA.portable.InputStream;你要導(dǎo)入IO流的包;
客戶端中,Socket socket=new Socket(InetAddress.getLocalHost(),7001);將InetAdress.getLocalHost()直接寫成"IP"這種就行了,IP是你自己的IP地址。
另外是先啟動服務(wù)端,如果服務(wù)端沒有啟動的話,啟動客戶端會報錯
?br.close();
???is.close();
???pw.close();
???os.close();
???socket.close(); ? 如果多個流連接在一起,直接關(guān)閉最終的流就可以了;br.close();os.close();socket.close();