熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

分享socket 客戶端-服務器入門代碼

2022-06-13   來源: Java核心技術 

  這是從另一個論壇的代碼修改的原來有很多錯誤我已經修改供大家欣賞!

  這中間還用到了設計模式中的代理模式還有一些jframe入門的東西

   客戶端

  public class JavaClient extends JFrame implements ActionListener//以JFrame為基類實現ActionListener接口
{
    JButton sendButton; //發送按鈕
    JTextField inputField; // 輸入框
    JTextArea outputArea; // 服務器返回框
    static ClientAgent ca;
    public JavaClient() //在建構函數中完成圖形界面的初始化
    {
        inputField=new JTextField(這裡輸入); //供客戶端輸入的文本框
        outputArea=new JTextArea(服務器返回); //顯示服務器返回數據的文本域
        sendButton=new JButton(發送);
        JPanel panel=new JPanel(); //新建面板
        panelsetLayout(new BorderLayout()); //設置面板風格為BorderLayout
        paneladd(inputFieldBorderLayoutNORTH); //放置控件
        paneladd(outputAreaBorderLayoutCENTER);
        paneladd(sendButtonBorderLayoutPAGE_END);
        sendButtonaddActionListener(this);
        setTitle(Java通訊客戶端);
        setContentPane(panel);
    }
    public static void main(String[] args)
    {
        JavaClient frame=new JavaClient();
        framepack();//注意javaClient是JFrame的派生類調用基類方法
        framesetVisible(true);
        ca=new ClientAgent(); //傳遞服務器名稱和端口號
    }
    public void actionPerformed(ActionEvent ae)
    {
        if(aegetSource()==sendButton) //判斷事件源控件是否是發送按鈕
        {
        try
        {
            casendRequest(inputFieldgetText()); //發送文本框中的文本
            Systemoutprintln(send:+inputFieldgetText());
        }catch(Exception ex)
        {
            exprintStackTrace();
        }
        outputAreaappend(\n+cagetResponse()); //接收服務器回應並寫入文本域
        }
    }
}

  客戶代理端

  import javaio*;
import *;
/**
 * @author Administrator
 *
 * TODO To change the template for this generated type comment go to
 * Window Preferences Java Code Style Code Templates
 */
public class ClientAgent {
    PrintStream ops; //輸出流(指向服務器)
    DataInputStream ips;//輸入流(來自服務器)
    BufferedReader bf;
    String cltRequest;//客戶端請求
    String svrResponse;//服務器端回應

  public ClientAgent(String serverNameint port)
    {
        try
        {
        Socket clientSocket=new Socket(serverNameport ); //根據服務器名和端口號建立Socket
        ops=new PrintStream(clientSocketgetOutputStream());//獲得Socket的輸出流
        //ips=new DataInputStream(clientSocketgetInputStream());//獲得Socket的輸入流
        bf = new BufferedReader(new InputStreamReader(clientSocketgetInputStream()));
        }
        catch(Exception e)
        {
        Systemoutprintln(無法連接服務器!);
        }
    }
    public void sendRequest(String request)
    {
        opsprintln(request); //向Socket的輸出流寫入字符串
    }
    public String getResponse()
    {
        String str=new String();
        try
        {
            //str=ipsreadLine(); //從Socket的輸入流讀入字符串

  str = bfreadLine();
            Systemoutprintln(服務器返回+str);
        }
        catch(IOException e){} //必須捕獲錯誤
        return str;
    }
}

   服務器端

  import javaio*;
import *;
/**
 * @author Administrator
 *
 * TODO To change the template for this generated type comment go to
 * Window Preferences Java Code Style Code Templates
 */
public class ServerAgent {
    ServerSocket svrSkt=null;
    Socket cltSkt=null;
    //DataInputStream input=null; //輸入流來自客戶端
    BufferedReader inf=null;
    PrintStream output=null; //輸出流指向客戶端

  public ServerAgent(int port) //main()函數傳遞監聽端口號
    {
        Systemoutprintln(服務器代理正在監聽端口+port);
        try
        {
            svrSkt=new ServerSocket(port); //開始監聽
        }catch(IOException e){Systemoutprintln(監聽端口+port+失敗);}
        try
        {
            cltSkt=svrSktaccept(); //接收連接請求
        }
        catch(IOException e){Systemoutprintln(連接失敗);}
        try
        {
            //input=new DataInputStream(cltSktgetInputStream()); //獲得輸入流
            inf = new BufferedReader(new InputStreamReader(cltSktgetInputStream()));
            output=new PrintStream(cltSktgetOutputStream()); //獲得輸出流
        }
        catch(IOException e){}
        outputprintln(歡迎);
    }
    public String getRequest()
    {
        Systemoutprintln(Server getRequest);
        String frmClt=null;
        try
        {
            //frmClt=inputreadLine();
            frmClt = infreadLine();
            Systemoutprintln(After Server getRequest:+frmClt);
        }
        catch(Exception e){
            Systemoutprintln(無法讀取端口);
            Systemexit();
        }
        return frmClt;
    }
    public void sendResponse(String response)
    {
        Systemoutprintln(Server sendResponse);
        try
        {
            outputprintln(response);
        }
        catch(Exception e){
            Systemoutprintln(寫端口失敗);
            Systemexit();
        }
    }
    public static void main(String[] args) throws IOException
    {
        ServerAgent sa=new ServerAgent();
        while(true)
        {
            sasendResponse(sagetRequest());
        }
    }

  }


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26907.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.