国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

C/S結(jié)構(gòu)框架聊天室

source / 2844人閱讀

摘要:聊天室掌握使用語(yǔ)言進(jìn)行面向?qū)ο笤O(shè)計(jì)的基本方法,提高運(yùn)用分析問(wèn)題,解決問(wèn)題的能力。使用技術(shù)完成聊天室系統(tǒng),深入學(xué)習(xí)使用語(yǔ)言。

C/S聊天室
1.掌握使用JAVA語(yǔ)言進(jìn)行面向?qū)ο笤O(shè)計(jì)的基本方法,提高運(yùn)用分析問(wèn)題,解決問(wèn)題的能力。
2.使用Java技術(shù)完成聊天室系統(tǒng),深入學(xué)習(xí)使用Java語(yǔ)言。
3.使用Java 的多線程機(jī)制,深入理解Java多線程技術(shù)的應(yīng)用。
4.使用AWT和Swing事件,對(duì)Java的深入學(xué)習(xí)。
5.使用網(wǎng)絡(luò)編程,掌握基于TCP協(xié)議的Socket編程,了解Socket編程的協(xié)議約定,掌握簡(jiǎn)單應(yīng)用協(xié)議的開發(fā)。
6.使用C/S架構(gòu),對(duì)網(wǎng)絡(luò)編程有一定的了解
7.熟悉事件監(jiān)聽的應(yīng)用和方法的編寫
代碼如下:
**

①:Client客戶端

</>復(fù)制代碼

  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import java.io.*;
  4. import java.net.*;
  5. import javax.swing.*;
  6. import org.omg.CORBA_2_3.portable.OutputStream;
  7. public class Demo1 extends JFrame implements ActionListener, MouseListener{
  8. JTextArea area;
  9. JComboBox box;
  10. JTextField field1,field2,field3;
  11. JLabel label,label1;
  12. JButton button1,button2;
  13. JPanel panel1,panel2;
  14. JPopupMenu pop;
  15. JMenuItem popm1,popm2,popm3;
  16. Socket soc;
  17. InputStream in;
  18. public Demo1(){
  19. super("聊天室");
  20. this.setBounds(100, 100, 500, 400);
  21. area=new JTextArea(8,8);
  22. area.addMouseListener(this);
  23. area.setLineWrap(true);//自動(dòng)換行
  24. area.setEditable(false);//設(shè)置文本區(qū)域不可編輯
  25. JScrollPane js=new JScrollPane(area);//添加滾動(dòng)條
  26. js.setBounds(0,0,480,250);
  27. js.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);//設(shè)置總是出現(xiàn)滾動(dòng)條
  28. panel1=new JPanel();
  29. panel2=new JPanel();
  30. String str[]={"所有人","0","1","2"};
  31. box=new JComboBox(str);
  32. field1=new JTextField(20);
  33. field1.setEditable(false);
  34. field1.addActionListener(this);
  35. button1=new JButton("發(fā)送");
  36. button1.setEnabled(false);
  37. button1.addActionListener(this);
  38. label1=new JLabel("用戶名:");
  39. field3=new JTextField(9);
  40. label=new JLabel("服務(wù)器名");
  41. field2=new JTextField(8);
  42. field2.setText("localhost");
  43. field2.addActionListener(this);
  44. button2=new JButton("連接");
  45. button2.addActionListener(this);
  46. panel1.add(box);
  47. panel1.add(field1);
  48. panel1.add(button1);
  49. panel1.setBounds(50,260,400,50);
  50. panel2.add(label1);
  51. panel2.add(field3);
  52. panel2.add(label);
  53. panel2.add(field2);
  54. panel2.add(button2);
  55. panel2.setBounds(50,310,400,50);
  56. pop=new JPopupMenu();
  57. popm1=new JMenuItem("復(fù)制");
  58. popm1.addActionListener(this);
  59. popm2=new JMenuItem("剪切");
  60. popm2.addActionListener(this);
  61. popm3=new JMenuItem("粘貼");
  62. popm3.addActionListener(this);
  63. pop.add(popm1);
  64. pop.add(popm2);
  65. pop.add(popm3);
  66. area.add(pop);
  67. area.addMouseListener(this);
  68. field1.add(pop);
  69. field1.addMouseListener(this);
  70. setLayout(null);
  71. add(js);
  72. add(panel1);
  73. add(panel2);
  74. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  75. setVisible(true);
  76. }
  77. public static void main(String[] args) {
  78. // TODO Auto-generated method stub
  79. new Demo1();
  80. }
  81. @Override
  82. public void actionPerformed(ActionEvent e) {
  83. // TODO Auto-generated method stub
  84. if(e.getActionCommand().equals("復(fù)制")){
  85. area.copy();
  86. }
  87. if(e.getActionCommand().equals("剪切")){
  88. field1.cut();
  89. }
  90. if(e.getActionCommand().equals("粘貼")){
  91. field1.paste();
  92. }
  93. if(e.getSource()==button1||e.getSource()==field1){
  94. area.append(field3.getText()+"對(duì)"+box.getSelectedItem()+"說(shuō): "+field1.getText()+"
  95. ");
  96. //area.append(field1.getText()+"
  97. ");
  98. try {
  99. java.io.OutputStream out = soc.getOutputStream();
  100. BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(out));
  101. //bw.write("對(duì)"+this.getTitle()+"說(shuō):"+field1.getText());
  102. bw.write(field3.getText()+"-"+box.getSelectedItem()+"-"+field1.getText());
  103. bw.newLine();//換行
  104. bw.flush();//刷新
  105. } catch (IOException e1) {
  106. // TODO Auto-generated catch block
  107. e1.printStackTrace();
  108. }
  109. field1.setText("");
  110. }else{
  111. if(e.getActionCommand().equals("連接")&&field2.getText().equals("")){
  112. JOptionPane.showMessageDialog(null,"請(qǐng)輸入正確的服務(wù)器名","信息",JOptionPane.INFORMATION_MESSAGE);
  113. }else if(e.getSource()==field2||e.getActionCommand().equals("連接")){
  114. String fuwuqi=field2.getText();
  115. if(!fuwuqi.equals("")){
  116. System.out.println("服務(wù)器地址:"+fuwuqi);
  117. try {
  118. soc=new Socket(fuwuqi,7890);
  119. new ClientThread(soc.getInputStream(),area,field3.getText()).start();//當(dāng)連接成功時(shí),則啟動(dòng)線程
  120. field2.setEditable(false);//當(dāng)連接成功時(shí),便不可再連接
  121. button2.setEnabled(false);//設(shè)定連接按鈕不可連接
  122. field1.setEditable(true);//設(shè)定field1文本框可用
  123. button1.setEnabled(true);//連接成功,則設(shè)發(fā)送按鈕可用
  124. String name=field3.getText();//獲取用戶名文本框中的值
  125. this.setTitle(name+"聊天室");//設(shè)置標(biāo)題
  126. area.append(name+"登錄成功!"+"
  127. ");
  128. java.io.OutputStream out = soc.getOutputStream();
  129. PrintWriter pw=new PrintWriter(out,true);
  130. pw.println("login"+"-"+field3.getText()+"-"+"上線啦!");
  131. field3.setEditable(false);//輸入用戶名文本框設(shè)為不可用
  132. //field3.setText("");//將用戶名文本框的內(nèi)容置為空
  133. } catch (UnknownHostException e1) {
  134. // TODO Auto-generated catch block
  135. //e1.printStackTrace();
  136. System.out.println("請(qǐng)輸入正確的服務(wù)器名!");
  137. } catch (IOException e1) {
  138. // TODO Auto-generated catch block
  139. //e1.printStackTrace();
  140. System.out.println("服務(wù)器連接異常!");
  141. }
  142. }
  143. field2.setText("");
  144. }
  145. }
  146. }
  147. @Override
  148. public void mouseClicked(MouseEvent e){
  149. if(e.getButton()==3){
  150. if(e.getSource()==area){
  151. pop.show(area,e.getX(),e.getY());
  152. }else if(e.getSource()==field1){
  153. pop.show(field1,e.getX(),e.getY());
  154. }
  155. }
  156. }
  157. @Override
  158. public void mouseEntered(MouseEvent e) {
  159. // TODO Auto-generated method stub
  160. }
  161. @Override
  162. public void mouseExited(MouseEvent e) {
  163. // TODO Auto-generated method stub
  164. }
  165. @Override
  166. public void mousePressed(MouseEvent e) {
  167. // TODO Auto-generated method stub
  168. }
  169. @Override
  170. public void mouseReleased(MouseEvent e) {
  171. // TODO Auto-generated method stub }
  172. }//該線程用來(lái)接收服務(wù)器發(fā)來(lái)的消息
  173. class ClientThread extends Thread{
  174. private InputStream in;
  175. JTextArea area;
  176. String user;
  177. public ClientThread(InputStream in,JTextArea area,String user){
  178. this.in=in;
  179. this.area=area;
  180. this.user=user;
  181. }
  182. public void run(){
  183. try {
  184. BufferedReader br=new BufferedReader(new InputStreamReader(in));
  185. String line=null;
  186. while((line=br.readLine())!=null){
  187. System.out.println("服務(wù)器發(fā)來(lái)的消息:"+line);
  188. String temp[]=line.split("-");
  189. if(temp[0].equals("login")){
  190. if(!(temp[1].equals(user))){
  191. area.append(temp[1]+"上線啦!
  192. ");
  193. }
  194. }else if(temp[1].equals("所有人")){
  195. if(!(temp[0].equals(user))){
  196. area.append(temp[0]+"對(duì)所有人說(shuō):"+temp[2]+"
  197. ");
  198. }
  199. }else if(temp[1].equals(user)){//接受者剛好是本身
  200. area.append(temp[0]+"對(duì)你說(shuō):"+temp[2]+"
  201. ");
  202. }
  203. }
  204. } catch (IOException e1) {
  205. // TODO Auto-generated catch block
  206. e1.printStackTrace(); }
  207. }
  208. }

②:代碼:Server服務(wù)器

</>復(fù)制代碼

  1. import java.util.*;
  2. import java.io.*;
  3. import java.net.*;
  4. public class Server {
  5. static ServerSocket ser;
  6. InputStream in;
  7. OutputStream out;
  8. static Socket soc;
  9. public static void main(String[] args) {
  10. // TODO Auto-generated method stub
  11. int count=0;//統(tǒng)計(jì)連接客戶端的個(gè)數(shù)
  12. ArrayList all=new ArrayList();//創(chuàng)建一個(gè)容器,用來(lái)保存socket對(duì)象
  13. try {
  14. ser=new ServerSocket(7890);
  15. while(true){
  16. soc=ser.accept();
  17. count++;
  18. //創(chuàng)建線程對(duì)象并開啟
  19. all.add(soc);
  20. System.out.println(count+"個(gè)連接成功");
  21. new ServerThread(soc.getInputStream(),soc.getOutputStream(),all).start();
  22. /*Thread t=new ServerThread(soc.getOutputStream());
  23. t.start();*/
  24. }
  25. } catch (IOException e) {
  26. // TODO Auto-generated catch block
  27. //e.printStackTrace();}
  28. }
  29. }
  30. class ServerThread extends Thread{
  31. //定義一個(gè)線程類,用來(lái)循環(huán)讀取客戶端發(fā)送過(guò)來(lái)的消息
  32. private InputStream in;
  33. private OutputStream out;
  34. ArrayList all;
  35. public ServerThread(InputStream in,OutputStream out,ArrayList all){
  36. this.in=in;
  37. this.out=out;
  38. this.all=all;
  39. }
  40. public void run(){
  41. BufferedReader br=new BufferedReader(new InputStreamReader(in));
  42. //BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(out));
  43. String line=null;
  44. try {
  45. while(true){
  46. line=br.readLine();
  47. // bw.write(line);//將客戶端發(fā)來(lái)的消息再發(fā)回
  48. // bw.newLine();
  49. // bw.flush();
  50. System.out.println("客戶端:"+line);
  51. for(int i=0;i

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/70999.html

相關(guān)文章

  • 2018年『web』開發(fā)者不得不知的技術(shù)趨勢(shì)

    摘要:年開發(fā)者不得不知的技術(shù)趨勢(shì)作為一個(gè)開發(fā)者,無(wú)論是做前端還是后端,都應(yīng)該時(shí)刻保持著對(duì)技術(shù)的敏感性。這是一個(gè)預(yù)報(bào)天氣的聊天機(jī)器人。微信小程序年月微信小程序正式上線。年剛剛開始,作為一個(gè)開發(fā)者,保持對(duì)前沿技術(shù)的敏感性,提升格局,放眼遠(yuǎn)方。 showImg(https://segmentfault.com/img/bV1mBS?w=700&h=350); 2018年『web』開發(fā)者不得不知的技...

    linkin 評(píng)論0 收藏0
  • 練習(xí)項(xiàng)目備選清單

    摘要:練習(xí)項(xiàng)目備選清單文件下載器功能概要設(shè)計(jì)實(shí)現(xiàn)新建下載功能以為基礎(chǔ)給出下載鏈接可以啟動(dòng)下載任務(wù)實(shí)現(xiàn)局域網(wǎng)內(nèi)下載傳輸文件以單線程下載方式實(shí)現(xiàn)附加功能支持?jǐn)帱c(diǎn)續(xù)傳實(shí)現(xiàn)多線程下載實(shí)現(xiàn)下載參考技術(shù)套接字編程多線程編程音視頻播放器功能概要設(shè)計(jì)實(shí)現(xiàn)播放常見 練習(xí)項(xiàng)目備選清單 Utilities 1. 文件下載器 功能概要設(shè)計(jì): 實(shí)現(xiàn)新建下載功能(以ftp為基礎(chǔ)) 給出下載鏈接可以啟動(dòng)下載任務(wù) 實(shí)現(xiàn)局...

    guyan0319 評(píng)論0 收藏0
  • 練習(xí)項(xiàng)目備選清單

    摘要:練習(xí)項(xiàng)目備選清單文件下載器功能概要設(shè)計(jì)實(shí)現(xiàn)新建下載功能以為基礎(chǔ)給出下載鏈接可以啟動(dòng)下載任務(wù)實(shí)現(xiàn)局域網(wǎng)內(nèi)下載傳輸文件以單線程下載方式實(shí)現(xiàn)附加功能支持?jǐn)帱c(diǎn)續(xù)傳實(shí)現(xiàn)多線程下載實(shí)現(xiàn)下載參考技術(shù)套接字編程多線程編程音視頻播放器功能概要設(shè)計(jì)實(shí)現(xiàn)播放常見 練習(xí)項(xiàng)目備選清單 Utilities 1. 文件下載器 功能概要設(shè)計(jì): 實(shí)現(xiàn)新建下載功能(以ftp為基礎(chǔ)) 給出下載鏈接可以啟動(dòng)下載任務(wù) 實(shí)現(xiàn)局...

    peixn 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<