Java中基于TCPsocket的一對(duì)一簡(jiǎn)單聊天室_第1頁
Java中基于TCPsocket的一對(duì)一簡(jiǎn)單聊天室_第2頁
Java中基于TCPsocket的一對(duì)一簡(jiǎn)單聊天室_第3頁
Java中基于TCPsocket的一對(duì)一簡(jiǎn)單聊天室_第4頁
Java中基于TCPsocket的一對(duì)一簡(jiǎn)單聊天室_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、江蘇經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院信息技術(shù)學(xué)院2015-2016-2學(xué)年網(wǎng)絡(luò)編程技術(shù)(java)課程期末大作業(yè)姓 名:高文頂學(xué) 號(hào):班 級(jí):14網(wǎng)絡(luò)專 業(yè):計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)作品名稱:模仿QQ的簡(jiǎn)單即時(shí)通信工具2016年4月一、程序功能簡(jiǎn)介本程序擁有圖形界面和一對(duì)一聊天程序,實(shí)現(xiàn)監(jiān)聽連接、發(fā)送、退出功能。先啟動(dòng)Server服務(wù)器端程序進(jìn)行端口監(jiān)聽,然后啟動(dòng)Client客戶端連接Server端IP地址和端口號(hào),Server端監(jiān)聽到后顯示連接成功,可以進(jìn)行通信。二、運(yùn)行界面截圖(一)界面主程序(二)客戶端程序三、核心代碼說明(一)Client.java核心代碼說明示例package gwd;import java.

2、awt.*;import java.awt.event.*;import java.io.*;import .InetAddress;import .InetSocketAddress;import .Socket;import .UnknownHostException;import javax.swing.*;import javax.swing.border.EmptyBorder;public class Client extends JFrame implements Runnable, ActionListener,

3、KeyListener private static final long serialVersionUID = L;private JScrollPane textPane;/滾動(dòng)條private JLabel pcLabel,portLabel;/標(biāo)簽private JTextArea chatArea;/聊天內(nèi)容區(qū)域private JTextField pctextField,porttextField,sendField;/文本框private JButton connectButton,sendButton;/按鈕private Socket socket;/客戶端套接字對(duì)象priv

4、ate DataInputStream in;/數(shù)據(jù)輸入流對(duì)象private DataOutputStream out;/數(shù)據(jù)輸出流對(duì)象private Thread thread;/線程private JComboBox namecomboBox;/下拉列表框public Client() createUserInterface();/調(diào)用圖形界面setTitle(客戶端);/設(shè)置標(biāo)題setSize(550,500);/設(shè)置寬度 和高度setResizable( false );/禁用界面最大化setLocationRelativeTo(null);/自動(dòng)釋放大小setVisible(true

5、);/窗口顯示出來setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/點(diǎn)擊關(guān)閉 默認(rèn)關(guān)閉窗口public void createUserInterface() setLayout(null);/設(shè)置布局JPanel contentPane=new JPanel();/創(chuàng)建頂部 panelcontentPane.setBounds(5, 5, 525 , 50);/設(shè)置panel坐標(biāo)add(contentPane);/添加控件到 窗口屏幕中pcLabel = new JLabel(主機(jī):);/創(chuàng)建主機(jī)標(biāo)簽contentPane.add(pcLabel)

6、;pctextField = new JTextField();/創(chuàng)建主機(jī)文本框contentPane.add(pctextField);pctextField.setColumns(10);portLabel = new JLabel(端口);/創(chuàng)建端口標(biāo)簽contentPane.add(portLabel);porttextField = new JTextField();/創(chuàng)建端口文本框porttextField.setColumns(10);contentPane.add(porttextField); namecomboBox = new JComboBox();/創(chuàng)建下拉列表框na

7、mecomboBox.addItem( 張三 );/設(shè)置值namecomboBox.addItem( 李四 );/設(shè)置值namecomboBox.setSelectedIndex( 0 );namecomboBox.setEditable(true);/設(shè)置允許 選擇contentPane.add(namecomboBox);chatArea = new JTextArea();/創(chuàng)建聊天內(nèi)容區(qū)域chatArea.setLineWrap(true);/設(shè)置換行textPane = new JScrollPane(chatArea);/滾動(dòng)條textPane.setBounds(5, 60, 5

8、25, 360);add(textPane);sendButton = new JButton(發(fā)送);/創(chuàng)建發(fā)送按鈕sendButton.setBounds(355, 430, 80, 24);sendButton.addKeyListener(this);/綁定發(fā)送按鈕鍵盤對(duì)象sendButton.addActionListener(this);/綁定發(fā)送按鈕點(diǎn)擊對(duì)象add(sendButton);sendField = new JTextField(255);/創(chuàng)建發(fā)送文本框sendField.setBounds(5, 430, 330, 24);sendField.addKeyList

9、ener(this);/發(fā)送文本框綁定鍵盤事件add(sendField);connectButton = new JButton(連接);/創(chuàng)建連接按鈕connectButton.setBounds(450, 430, 80, 24);connectButton.addActionListener(this);/綁定連接按鈕對(duì)象contentPane.add(connectButton);socket = new Socket();/創(chuàng)建客戶端Sokcet對(duì)象thread = new Thread(this);/創(chuàng)建線程對(duì)象public void connect() /創(chuàng)建客戶端Socket

10、套接字try if (!socket.isConnected() /判斷套接字是否連接成功InetAddress address = InetAddress.getByName(pctextField.getText();/獲取本地IP地址對(duì)象InetSocketAddress socketAddress = new InetSocketAddress(address, Integer.parseInt(porttextField.getText();/創(chuàng)建InetSocketAddress對(duì)象socket.connect(socketAddress);/連接服務(wù)器in = new DataI

11、nputStream(socket.getInputStream();/創(chuàng)建數(shù)據(jù)輸入流對(duì)象out = new DataOutputStream(socket.getOutputStream();/創(chuàng)建數(shù)據(jù)輸出流對(duì)象sendButton.setEnabled(true);/啟動(dòng)發(fā)送按鈕if (!(thread.isAlive() /判斷線程是否激活thread = new Thread(this);/創(chuàng)建線程對(duì)象thread.start();/啟動(dòng)線程 catch (Exception e) System.out.println(e);socket = new Socket();/創(chuàng)建Socke

12、t對(duì)象public void send() /向客戶端發(fā)送消息String msg = sendField.getText().trim();/獲取發(fā)送消息內(nèi)容 if (msg.isEmpty() /判斷是否為空J(rèn)OptionPane.showMessageDialog(this, 請(qǐng)輸入發(fā)送消息.);/提示消息return;chatArea.append(namecomboBox.getSelectedItem()+: + msg + n);/追加文本到聊天內(nèi)容區(qū)域中try out.writeUTF(namecomboBox.getSelectedItem()+: +msg);/發(fā)送消息到客

13、戶端sendField.setText();/清空消息 catch (Exception e) e.printStackTrace();public void actionPerformed(ActionEvent arg0) /點(diǎn)擊事件if (arg0.getSource() = sendButton) /發(fā)送按鈕send();/發(fā)送消息 else if (arg0.getSource() = connectButton) /連接對(duì)象connect();/啟動(dòng)客戶端套接字對(duì)象public void run() /啟動(dòng)線程if (Thread.currentThread() = thread)

14、 /判斷是否 當(dāng)前線程String msg = null;while (true) /循環(huán)接收客戶端消息try msg = in.readUTF();/將數(shù)據(jù)讀取出來chatArea.append(服務(wù)器: + msg + n);/顯示文本域中 catch (IOException e) e.printStackTrace();socket = new Socket();break;public void keyPressed(KeyEvent arg0) / 鍵盤按下if (arg0.getKeyCode() = KeyEvent.VK_ENTER) send();/發(fā)送消息Override

15、public void keyReleased(KeyEvent arg0) Overridepublic void keyTyped(KeyEvent arg0) public static void main(String args) EventQueue.invokeLater(new Runnable() public void run() try Client frame = new Client();frame.setVisible(true); catch (Exception e) e.printStackTrace(););二、Server.java核心代碼說明示例packa

16、ge gwd;import java.awt.*;import javax.swing.*;import javax.swing.border.EmptyBorder;import java.awt.event.*;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import .ServerSocket;import .Socket;import java.awt.event.ActionEvent;import java.awt.

17、event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.s

18、wing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;public class Server extends JFrame implements Runnable, ActionListener, KeyListener private JScrollPane textPane;/滾動(dòng)條private JLabel portLabel;/標(biāo)簽private JTextArea chatArea;/聊天內(nèi)容區(qū)域private JTextField portField,sendField;/文本框pr

19、ivate JButton sendButton,startButton;/按鈕private ServerSocket serversocket;/服務(wù)器套接字對(duì)象private Socket socket;/客戶端套接字對(duì)象private DataInputStream in;/數(shù)據(jù)輸入流對(duì)象private DataOutputStream out;/數(shù)據(jù)輸出流對(duì)象private Thread thread;/線程public Server() createUserInterface();/調(diào)用圖形界面setTitle(服務(wù)器);/設(shè)置標(biāo)題setSize(550,500);/設(shè)置寬度 和高

20、度setResizable( false );/禁用界面最大化setLocationRelativeTo(null);/自動(dòng)釋放大小setVisible(true); /顯示出來setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/點(diǎn)擊關(guān)閉 默認(rèn)關(guān)閉窗口public void createUserInterface() setLayout(null);/設(shè)置布局JPanel contentPane=new JPanel();/創(chuàng)建頂部 panelcontentPane.setBounds(5, 5, 525, 50);/設(shè)置panel坐標(biāo)add(con

21、tentPane);portLabel = new JLabel(端口);/創(chuàng)建端口標(biāo)簽contentPane.add(portLabel);portField = new JTextField();/創(chuàng)建端口文本框contentPane.add(portField);portField.setColumns(10);chatArea = new JTextArea();/創(chuàng)建聊天內(nèi)容區(qū)域chatArea.setLineWrap(true);/設(shè)置換行textPane = new JScrollPane(chatArea);/滾動(dòng)條textPane.setBounds(5, 60, 525,

22、360);add(textPane);sendButton = new JButton(發(fā)送);/創(chuàng)建發(fā)送按鈕sendButton.setBounds(355, 430, 80, 24);sendButton.addActionListener(this);/綁定發(fā)送按鈕點(diǎn)擊對(duì)象add(sendButton);sendField = new JTextField(255);/創(chuàng)建發(fā)送文本框sendField.setBounds(5, 430, 330, 24);sendField.addKeyListener(this);/消息框 綁定鍵盤事件監(jiān)聽add(sendField);startBut

23、ton = new JButton(啟動(dòng));/創(chuàng)建啟動(dòng)按鈕startButton.setBounds(450, 430, 80, 24);startButton.addActionListener(this);/綁定啟動(dòng)按鈕對(duì)象contentPane.add(startButton);thread = new Thread();/創(chuàng)建線程對(duì)象public void connect() /創(chuàng)建服務(wù)器ServerSocket套接字try chatArea.append(請(qǐng)稍等.n);/添加文本到聊天內(nèi)容區(qū)域中 serversocket = new ServerSocket(Integer.pars

24、eInt(portField.getText();/創(chuàng)建ServerSocket 套接字對(duì)象socket = serversocket.accept();/接收 客戶端 套接字對(duì)象chatArea.append(連接成功. n);/追加信息到聊天內(nèi)容區(qū)域中,顯示成功連接服務(wù)器in = new DataInputStream(socket.getInputStream();/創(chuàng)建數(shù)據(jù)輸入流對(duì)象out = new DataOutputStream(socket.getOutputStream();/創(chuàng)建數(shù)據(jù)輸出流對(duì)象if (!thread.isAlive() /判斷線程是否激活thread = n

25、ew Thread(this);/創(chuàng)建線程對(duì)象thread.start();/啟動(dòng)線程 catch (Exception e) System.out.println(e);try serversocket = new ServerSocket();/創(chuàng)建ServerSocket 套接字對(duì)象 catch (IOException e1) e1.printStackTrace();public void send() /向客戶端發(fā)送消息String msg = sendField.getText().trim();/獲取發(fā)送消息內(nèi)容if (msg.isEmpty() /判斷是否為空J(rèn)OptionPane.showMessageDialog(this, 請(qǐng)輸入發(fā)送消息.);/提示消息return;chatArea.append(服務(wù)器: + msg + n);/追加文本到聊天內(nèi)容區(qū)域中try out.writeUTF(msg);/發(fā)送消息到客戶端sendField.setText(); catch (Exception e) e.printStackTrace();public void actionPerformed(ActionEvent arg0) /鍵盤事件if (arg0.g

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論