激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|JavaScript|易語(yǔ)言|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - Java編程實(shí)現(xiàn)基于TCP協(xié)議的Socket聊天室示例

Java編程實(shí)現(xiàn)基于TCP協(xié)議的Socket聊天室示例

2021-03-28 16:13fearlessMore JAVA教程

這篇文章主要介紹了Java編程實(shí)現(xiàn)基于TCP協(xié)議的Socket聊天室,結(jié)合實(shí)例形式詳細(xì)分析了java基于TCP協(xié)議的Socket聊天室客戶端與服務(wù)器端相關(guān)實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下

本文實(shí)例講述了Java編程實(shí)現(xiàn)基于TCP協(xié)議Socket聊天室。分享給大家供大家參考,具體如下:

這里使用Socket套接字進(jìn)行編程,完成的是基于TCP可靠服務(wù)實(shí)現(xiàn)服務(wù)器與客戶端的雙通信。

Server服務(wù)器端:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package com.han;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.*;
import java.net.*;
import javax.swing.JDialog;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/**
 * 本程序?qū)崿F(xiàn)了一個(gè)TCP程序的服務(wù)器編程部分。
 * 使用Socket套接字進(jìn)行編程,完成的是基于TCP可靠服務(wù)實(shí)現(xiàn)與客戶端的雙通信。
 * 客戶端的編程見本包中的類Client
 * @author HAN
 *
 */
@SuppressWarnings("serial")
public class Server extends JDialog{
  private BufferedReader reader;
  private PrintWriter writer;
  private ServerSocket server;
  private Socket socket;
  private JTextArea ta=new JTextArea();
  private JScrollPane sp=new JScrollPane(ta);
  private JTextField tf=new JTextField();
  Container cc;
  public Server(String title) {
    setTitle(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing (WindowEvent we) {
        dispose(); //撤銷dialog一切相關(guān)資源
        System.exit(0); //正常退出程序
      }
    });
    cc=getContentPane();
    setLayout(null);
    ta.setLineWrap(true);
    ta.setEditable(false);
    sp.setBounds(0,0,300,342);
    tf.setBounds(0,342,300,25);
    cc.add(sp);
    cc.add(tf);
    tf.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){
        try {
          writer=new PrintWriter(socket.getOutputStream(),true);
        } catch (IOException e1) {
          // TODO Auto-generated catch block
          e1.printStackTrace();
        }
        writer.println(tf.getText());
        ta.append("User1:"+tf.getText()+'\n');
        tf.setText("");
      }
    });
  }
  void getserver(){
    try{
      server=new ServerSocket(8998);
      ta.append("服務(wù)器套接字已經(jīng)創(chuàng)建成功\n");
      while(true){
        ta.append("等待客戶機(jī)的連接\n");
        socket=server.accept();
        ta.append("客戶機(jī)已連接\n");
        reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
        getClientMessage();
      }
    }catch(Exception e){
      e.printStackTrace();
    }
  }
  private void getClientMessage(){
    try {
      while(true){
        String news=reader.readLine();
        if(news!=null){
          ta.append("User2:"+news+"\n");
        }else{
          ta.append("User2(客戶端) 已斷開鏈接\n");
          break;
        }
      }
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    try{
      if(reader!=null){
        reader.close();
      }
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    if(socket!=null){
      try {
        socket.close();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }
  public static void main(String[] args) {
    Server user1=new Server("User1");
    user1.setBounds(0,0,300,400);
    user1.setResizable(false);
    user1.setVisible(true);
    user1.getserver();
  }
}

Client客戶端:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package com.han;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
/**
 * 本程序?qū)崿F(xiàn)了一個(gè)TCP程序的客戶端編程部分。
 * 使用Socket套接字進(jìn)行編程,完成的是基于TCP可靠服務(wù)實(shí)現(xiàn)與服務(wù)器的雙通信。
 * 服務(wù)器的編程見本包中的類Server
 * 可以在不同的平臺(tái)與不同的機(jī)器上運(yùn)行,只是要把代碼中寫的IP地址修改為運(yùn)行服務(wù)器程序Server的機(jī)器的IP地址。
 * @author HAN
 *
 */
@SuppressWarnings("serial")
public class Client extends JDialog{
  private BufferedReader reader;
  private PrintWriter writer;
  private Socket socket;
  private JTextArea ta=new JTextArea();
  private JScrollPane sp=new JScrollPane(ta);
  private JTextField tf=new JTextField();
  Container cc;
  public Client(String title) {
    setTitle(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing (WindowEvent we) {
        dispose(); //撤銷dialog一切相關(guān)資源
        System.exit(0); //正常退出程序
      }
    });
    cc=getContentPane();
    setLayout(null);
    ta.setLineWrap(true);
    ta.setEditable(false);
    sp.setBounds(0,0,300,342);
    tf.setBounds(0,342,300,25);
    cc.add(sp);
    cc.add(tf);
    tf.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){
        writer.println(tf.getText());
        ta.append("User2:"+tf.getText()+'\n');
        tf.setText("");
      }
    });
  }
  private void connect(){
    ta.append("嘗試連接\n");
    try {
      socket=new Socket("192.168.1.3",8998);
    } catch (UnknownHostException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    try {
      writer=new PrintWriter(socket.getOutputStream(),true);
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    ta.append("完成連接\n");
  }
  private void getClientMessage(){
    try {
      reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
      while(true){
        String news=reader.readLine();
        if(news!=null){
          ta.append("User1:"+news+"\n");
        }else{
          ta.append("User1(服務(wù)器) 已斷開鏈接,等待服務(wù)器重連之時(shí),重啟User2(客戶端)進(jìn)行通信\n");
          break;
        }
      }
    } catch (IOException e) {
      // TODO Auto-generated catch block
      ta.append("User1(服務(wù)器) 已斷開鏈接,等待服務(wù)器重連之時(shí),重啟User2(客戶端)進(jìn)行通信\n");
      e.printStackTrace();
    }
    try{
      if(reader!=null){
        reader.close();
      }
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    if(socket!=null){
      try {
        socket.close();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }
  public static void main(String[] args) {
    Client user2=new Client("User2");
    user2.setBounds(0,0,300,400);
    user2.setVisible(true);
    user2.setResizable(false);
    user2.connect();
    user2.getClientMessage();
  }
}

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

原文鏈接:http://blog.csdn.net/gaowen_han/article/details/7163709

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品在线视频观看 | 日韩av电影免费在线观看 | 免费一级欧美在线观看视频 | 国产免费片| 久久久久国产成人免费精品免费 | 亚洲小视频网站 | 亚洲一区二区中文 | av在线等 | 免费在线观看国产精品 | 免费视频xxxx| 亚洲四播房 | 曰韩一级片 | 日本成人二区 | 精品亚洲视频在线观看 | 羞羞视频免费入口网站 | 亚洲电影在线观看高清免费 | 亚洲免费网站 | 叉逼视频 | 亚洲欧美在线看 | 国产日韩在线观看一区 | 久色视频网站 | 99影视在线视频免费观看 | 国产精品午夜性视频 | 久久久久亚洲国产精品 | 国产小视频在线观看 | 欧美成人做爰高潮片免费视频 | 国产女厕一区二区三区在线视 | 一区二区三区精品国产 | 国产成人精品二区 | 国产无遮挡一级毛片 | 色播亚洲 | 午夜在线小视频 | 香蕉成人在线观看 | 91 在线免费观看 | 久久久久国产成人精品亚洲午夜 | 91av久久| 欧美精品成人 | 免费观看国产视频 | 欧美精品一区二区性色 | 污黄视频在线观看 | 亚洲一区 国产 |