freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

合工大java實驗報告-資料下載頁

2025-05-13 22:27本頁面
  

【正文】 輸出日期和發(fā)送的消息( str) (new Date()+ \n me:+str+\n)。 ()。 //清空緩存區(qū) } ()。 } catch (Exception ex) {} } } class ServerThread extends Thread{ public void run(){ try { BufferedReader in = new BufferedReader(new InputStreamReader(()))。 //創(chuàng)建一個緩沖輸出流,其形參為從套接字 socket 中獲取的輸入流 String str。 while(true){ str = ()。 //按行讀取 ( str+\n)。 } } catch (Exception ex) {} } } }客戶端代碼:import .*。 import .*。 import .*。 import .*。 import .*。 import .*。 import 。 public class Client{ public static void main(String[] args) { MyFrame client=new MyFrame()。 (客戶端)。 (true)。 (false)。 //設置此窗體是否可由用戶調整大小 ()。 // 設置關閉操作 } } class MyFrame extends JFrame { JTextField ip。 JTextField port。 JTextField cin。 JTextArea content。 JButton connect。 JButton say。 Socket socket。 MyFrame(){ init()。 ConnectListen cListener=new ConnectListen()。 SayListen sListener = new SayListen()。 (cListener)。 //注冊監(jiān)聽器 (sListener)。 //注冊監(jiān)聽器 } void init(){ setLayout(new FlowLayout())。 //設置窗體為流式布局 setSize(440,500)。 setLocation(800,100)。 add(new JLabel(Server:ip))。 ip=new JTextField(,8)。 add(ip)。 add(new JLabel(Server:port))。 port=new JTextField(8888,8)。 add(port)。 connect=new JButton(connect)。 add(connect)。 content=new JTextArea(16,35)。 JScrollPane scroll=new JScrollPane(content)。 //設置滾動條 add(scroll)。 add(new Label(Say:))。 cin=new JTextField(你好!,25)。 add(cin)。 say=new JButton(say)。 add(say)。 } class ConnectListen implements ActionListener{ int portNum。 public void actionPerformed(ActionEvent e){ (false)。 //按下 connect 按鈕后, connect 不可再次點擊 try { (Connect to server....\n)。 //在文本區(qū)中顯示 Connect to server....\n portNum =(())。 //讀取 port 文本框中的字符串,并將字符串轉化為整型賦給 portNum socket = new Socket((),portNum)。 //定義對象 socket,并指定主機號(host)和端口號 portNum ClientThread ct = new ClientThread()。 //定義一個 ClientThread 類的對象 ct ()。 //啟動一個線程,并調用ClientThread 類中的 run()方法 } catch (Exception ex) {} } } class SayListen implements ActionListener{ String str。 public void actionPerformed(ActionEvent e){ try { PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(())),true)。 //從 socket 獲取字節(jié)輸出流,并將其最終轉化為 PrintWriter str=()。 //從文本框中獲取字符串賦給 str if(!()){ (new Date()+ \n+ str)。 //打印日期和 str (new Date()+\n me:+str+\n)。 ()。 //清空緩存區(qū) } ()。 } catch (Exception ex) {} } } class ClientThread extends Thread{ public void run(){ try { BufferedReader in = new BufferedReader(new InputStreamReader(()))。 //創(chuàng)建一個緩沖輸出流,其形參為從套接字 socket 中獲取的輸入流 String str。 while(true){ str = ()。 //按行讀取 ( str+\n)。 } } catch (Exception ex) {} } } }運行結果:五、實驗結論、分析、思考題與心得體會通過本次實驗,我對于GUI程序的便編寫,以及網絡通信與多線程編程有了一定的了解,并且也親自實現了一個基于GUI的客戶服務器的通信應用程序,在實驗過程中,我也遇到了不少的問題并加以解決:,客戶端有connect和say按鈕,按鈕被點擊后會觸發(fā)動作事件。而不同的按鈕要執(zhí)行不同的操作,也就意味著要寫多個actionPerformed()方法,可是一個類里面只能寫一個actionPerformed()方法,因此可以寫幾個實現了ActionPerformed()方法,在內部類中再寫一個actionPerformed()方法,這樣就寫了好幾個不同的actionPerformed()方法,在注冊監(jiān)聽器的時候,按鈕需要實現哪種功能,就用哪個內部類的對象來監(jiān)聽就可以了。 ServerSocket 對象來接受客戶端的連接請求, 并指定端口號, 客戶端通過Socket 對象來向服務器的 ip 和端口發(fā)送連接請求。服務器在接到連接請求后,服務器會創(chuàng)建一個新的 Socket 對象與客戶端的 Socket 對象連接。連接成功后通過 IO 流來通信,服務器的輸入流是客戶端的輸出流,服務器的輸出流時客戶端的輸入流
點擊復制文檔內容
黨政相關相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1