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

資訊專欄INFORMATION COLUMN

C/S結構框架聊天室

source / 2835人閱讀

摘要:聊天室掌握使用語言進行面向對象設計的基本方法,提高運用分析問題,解決問題的能力。使用技術完成聊天室系統,深入學習使用語言。

C/S聊天室
1.掌握使用JAVA語言進行面向對象設計的基本方法,提高運用分析問題,解決問題的能力。
2.使用Java技術完成聊天室系統,深入學習使用Java語言。
3.使用Java 的多線程機制,深入理解Java多線程技術的應用。
4.使用AWT和Swing事件,對Java的深入學習。
5.使用網絡編程,掌握基于TCP協議的Socket編程,了解Socket編程的協議約定,掌握簡單應用協議的開發。
6.使用C/S架構,對網絡編程有一定的了解
7.熟悉事件監聽的應用和方法的編寫
代碼如下:
**

①:Client客戶端

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
import org.omg.CORBA_2_3.portable.OutputStream;
public class Demo1 extends JFrame implements ActionListener, MouseListener{
JTextArea area;
JComboBox box;
JTextField field1,field2,field3;
JLabel label,label1;
JButton button1,button2;
JPanel panel1,panel2;
JPopupMenu pop;
JMenuItem popm1,popm2,popm3;
Socket soc;
InputStream in;
public Demo1(){
    super("聊天室"); 
    this.setBounds(100, 100, 500, 400);
    
    area=new JTextArea(8,8);
    area.addMouseListener(this);
    area.setLineWrap(true);//自動換行
    area.setEditable(false);//設置文本區域不可編輯
    JScrollPane js=new JScrollPane(area);//添加滾動條
    js.setBounds(0,0,480,250);
    js.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);//設置總是出現滾動條
    
    panel1=new JPanel();
    panel2=new JPanel();
    
    String str[]={"所有人","0","1","2"};
    box=new JComboBox(str);
    field1=new JTextField(20);
    field1.setEditable(false);
    field1.addActionListener(this);
    button1=new JButton("發送");
    button1.setEnabled(false);
    button1.addActionListener(this);
    
    label1=new JLabel("用戶名:");
    field3=new JTextField(9);
    label=new JLabel("服務器名");
    field2=new JTextField(8);
    field2.setText("localhost");
    field2.addActionListener(this);
    button2=new JButton("連接");
    button2.addActionListener(this);
    
    
    panel1.add(box);
    panel1.add(field1);
    panel1.add(button1);
    panel1.setBounds(50,260,400,50);
    
    panel2.add(label1);
    panel2.add(field3);
    panel2.add(label);
    panel2.add(field2);
    panel2.add(button2);
    panel2.setBounds(50,310,400,50);
    
    pop=new JPopupMenu();
    popm1=new JMenuItem("復制");
    popm1.addActionListener(this);
    popm2=new JMenuItem("剪切");
    popm2.addActionListener(this);
    popm3=new JMenuItem("粘貼");
    popm3.addActionListener(this);
    pop.add(popm1);
    pop.add(popm2);
    pop.add(popm3);
    area.add(pop);
    area.addMouseListener(this);
    field1.add(pop);
    field1.addMouseListener(this);
    
    setLayout(null);
    add(js);
    add(panel1);
    add(panel2);
    
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    
}
public static void main(String[] args) {
    // TODO Auto-generated method stub
    
    new Demo1();
}
@Override
public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    if(e.getActionCommand().equals("復制")){
        area.copy();
    }
    if(e.getActionCommand().equals("剪切")){
        field1.cut();
    }
    if(e.getActionCommand().equals("粘貼")){
        field1.paste();
    }
    
    if(e.getSource()==button1||e.getSource()==field1){
        area.append(field3.getText()+"對"+box.getSelectedItem()+"說:  "+field1.getText()+"
");
        //area.append(field1.getText()+"
");
        try {
            java.io.OutputStream out = soc.getOutputStream();
            BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(out));    
            //bw.write("對"+this.getTitle()+"說:"+field1.getText());
            bw.write(field3.getText()+"-"+box.getSelectedItem()+"-"+field1.getText());
            bw.newLine();//換行
            bw.flush();//刷新
            
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        field1.setText("");
        
    }else{
        if(e.getActionCommand().equals("連接")&&field2.getText().equals("")){
            JOptionPane.showMessageDialog(null,"請輸入正確的服務器名","信息",JOptionPane.INFORMATION_MESSAGE);
        }else if(e.getSource()==field2||e.getActionCommand().equals("連接")){
            String fuwuqi=field2.getText();
            
            if(!fuwuqi.equals("")){
                System.out.println("服務器地址:"+fuwuqi);
                
                try {
                    soc=new Socket(fuwuqi,7890);
                        
                        new ClientThread(soc.getInputStream(),area,field3.getText()).start();//當連接成功時,則啟動線程
                    
                    field2.setEditable(false);//當連接成功時,便不可再連接
                    button2.setEnabled(false);//設定連接按鈕不可連接
                    field1.setEditable(true);//設定field1文本框可用
                    button1.setEnabled(true);//連接成功,則設發送按鈕可用
                    String name=field3.getText();//獲取用戶名文本框中的值
                    this.setTitle(name+"聊天室");//設置標題
                    area.append(name+"登錄成功!"+"
");
                    java.io.OutputStream out = soc.getOutputStream();
                    PrintWriter pw=new PrintWriter(out,true);
                    pw.println("login"+"-"+field3.getText()+"-"+"上線啦!");
                    field3.setEditable(false);//輸入用戶名文本框設為不可用
                    //field3.setText("");//將用戶名文本框的內容置為空
                } catch (UnknownHostException e1) {
                    // TODO Auto-generated catch block                             
                    //e1.printStackTrace();
                    System.out.println("請輸入正確的服務器名!");
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    //e1.printStackTrace();
                    System.out.println("服務器連接異常!");
                }
            }
            field2.setText("");
            
            
        }
    }
    
    
}
@Override
public void mouseClicked(MouseEvent e){
    if(e.getButton()==3){
        if(e.getSource()==area){
            pop.show(area,e.getX(),e.getY());
            
        }else if(e.getSource()==field1){
            pop.show(field1,e.getX(),e.getY());
            
        }
    }
}

@Override
public void mouseEntered(MouseEvent e) {
    // TODO Auto-generated method stub
    
}
@Override
public void mouseExited(MouseEvent e) {
    // TODO Auto-generated method stub
    
}
@Override
public void mousePressed(MouseEvent e) {
    // TODO Auto-generated method stub
    
}
@Override
public void mouseReleased(MouseEvent e) {
    // TODO Auto-generated method stub }
    
}//該線程用來接收服務器發來的消息

class ClientThread extends Thread{
private InputStream in;
JTextArea area;
String user;
public ClientThread(InputStream in,JTextArea area,String user){
    this.in=in;
    this.area=area;
    this.user=user;
}
public void run(){
    
    try {
        BufferedReader br=new BufferedReader(new InputStreamReader(in));
        String line=null;
        while((line=br.readLine())!=null){
            System.out.println("服務器發來的消息:"+line);
            String temp[]=line.split("-");
            if(temp[0].equals("login")){
                    if(!(temp[1].equals(user))){
                        area.append(temp[1]+"上線啦!
");
                    }
                    
                
            }else if(temp[1].equals("所有人")){
                if(!(temp[0].equals(user))){
                    area.append(temp[0]+"對所有人說:"+temp[2]+"
");
                }
                
                
                    
            }else if(temp[1].equals(user)){//接受者剛好是本身
                area.append(temp[0]+"對你說:"+temp[2]+"
");
            }
            
        }
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace(); }
    }
}


②:代碼:Server服務器

import java.util.*;
import java.io.*;
import java.net.*;
public class Server {
static ServerSocket ser;
InputStream in;
OutputStream out;
static Socket soc;
public static void main(String[] args) {
    // TODO Auto-generated method stub
    int count=0;//統計連接客戶端的個數
    ArrayList all=new ArrayList();//創建一個容器,用來保存socket對象
    try {
        ser=new ServerSocket(7890);
        while(true){
            soc=ser.accept();
            count++;
            //創建線程對象并開啟
            all.add(soc);
            
            System.out.println(count+"個連接成功");
            new ServerThread(soc.getInputStream(),soc.getOutputStream(),all).start();    
            /*Thread t=new ServerThread(soc.getOutputStream());
            t.start();*/
            
            
        }
        
    } catch (IOException e) {
        // TODO Auto-generated catch block
        //e.printStackTrace();}
    }
}

class ServerThread extends Thread{
//定義一個線程類,用來循環讀取客戶端發送過來的消息
private InputStream in;
private OutputStream out;
ArrayList all;
public ServerThread(InputStream in,OutputStream out,ArrayList all){
    this.in=in;
    this.out=out;
    this.all=all;
}

public void run(){
    BufferedReader br=new BufferedReader(new InputStreamReader(in));
    //BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(out));
    
    String line=null;
    try {              
        while(true){
            line=br.readLine();
        //    bw.write(line);//將客戶端發來的消息再發回
        //    bw.newLine();
        //    bw.flush();
            System.out.println("客戶端:"+line);
            for(int i=0;i           
               
                                           
                       
                 

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70999.html

相關文章

  • 2018年『web』開發者不得不知的技術趨勢

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

    linkin 評論0 收藏0
  • 練習項目備選清單

    摘要:練習項目備選清單文件下載器功能概要設計實現新建下載功能以為基礎給出下載鏈接可以啟動下載任務實現局域網內下載傳輸文件以單線程下載方式實現附加功能支持斷點續傳實現多線程下載實現下載參考技術套接字編程多線程編程音視頻播放器功能概要設計實現播放常見 練習項目備選清單 Utilities 1. 文件下載器 功能概要設計: 實現新建下載功能(以ftp為基礎) 給出下載鏈接可以啟動下載任務 實現局...

    guyan0319 評論0 收藏0
  • 練習項目備選清單

    摘要:練習項目備選清單文件下載器功能概要設計實現新建下載功能以為基礎給出下載鏈接可以啟動下載任務實現局域網內下載傳輸文件以單線程下載方式實現附加功能支持斷點續傳實現多線程下載實現下載參考技術套接字編程多線程編程音視頻播放器功能概要設計實現播放常見 練習項目備選清單 Utilities 1. 文件下載器 功能概要設計: 實現新建下載功能(以ftp為基礎) 給出下載鏈接可以啟動下載任務 實現局...

    peixn 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<