`
Sunshyfangtian
  • 浏览: 243480 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类
最新评论

有界面的TCP Socket通信程序

阅读更多


 一个非常简单的有界面的TCP Socket的通信程序

 

程序由四个类组成:一个是服务器端;一个是客户端;另外两个是类,用来发送消息和接收消息的。

 

服务器端TcpServer.java

 

package TcpChat;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.*;

public class TcpServer {
 
    public static void main(String args[]){
     
     //初始化界面
        JFrame jf = new JFrame("服务器端");
        JTextField field = new JTextField(30);
        JTextArea area = new JTextArea();
        Cursor cursor = new Cursor(Cursor.TEXT_CURSOR);
        field.requestFocusInWindow();
        area.setEditable(false);
        area.setFont(new Font("宋体",0,14));
        JButton clear = new JButton("清屏");
        JButton button = new JButton("发送");
        Panel panel = new Panel();
        panel.add(field);
        panel.add(button);
        panel.add(clear);
        jf.add(area,"Center");
        jf.add(panel,"South");
        Toolkit toolkit = jf.getToolkit();
        Dimension d = toolkit.getScreenSize();
        jf.setBounds(d.width/2-268,d.height/2-163,536,327);
        jf.setResizable(false);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.validate();
        
        try{
         //在端口2008监听
            ServerSocket ss = new ServerSocket(2008);
            Socket s = ss.accept();
            
            InputStream is = s.getInputStream();
            OutputStream os = s.getOutputStream();
            DataInputStream dis = new DataInputStream(is);
            final DataOutputStream dos = new DataOutputStream(os);
            
            SendMsg say = new SendMsg(dos,field,button,area,clear);
            ReceiveMsg receiver = new ReceiveMsg(dis,area);   
            
            button.addActionListener(say);
            clear.addActionListener(say);             
            field.addKeyListener(say);
            jf.addFocusListener(say);
            receiver.start();
        }catch(IOException e){
            e.printStackTrace();
        }
    }

}

  

 

客户端TcpClient.java

 

package TcpChat;

import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.net.*;

public class TcpClient {
 
    public static void main(String args[]){
     
     //初始化界面
        JFrame jf = new JFrame("客户端");
        JTextField field = new JTextField(30);
        field.requestFocusInWindow();
        JTextArea area = new JTextArea();
        area.setEditable(false);
        area.setFont(new Font("宋体",0,14));
        JButton button = new JButton("发送");
        JButton clear = new JButton("清屏");
        Panel panel = new Panel();
        panel.add(field);
        panel.add(button);
        panel.add(clear);
        jf.add(area,"Center");
        jf.add(panel,"South");
        Toolkit toolkit = jf.getToolkit();
        Dimension d = toolkit.getScreenSize();
        jf.setBounds(d.width/2-268,d.height/2-163,536,327);
        jf.setResizable(false);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.validate();
        
        try{
         //获取服务器IP和端口号
            Socket s = new Socket("127.0.0.1",2008);
            
            InputStream is = s.getInputStream();
            OutputStream os = s.getOutputStream();
            DataInputStream dis = new DataInputStream(is);
            final DataOutputStream dos = new DataOutputStream(os);
            
            SendMsg say = new SendMsg(dos,field,button,area,clear);
            ReceiveMsg receiver = new ReceiveMsg(dis,area);  
            
            button.addActionListener(say);
            clear.addActionListener(say);
            field.addKeyListener(say);
            jf.addFocusListener(say);
            receiver.start();
        }catch(IOException e){
            e.printStackTrace();
        }
        
    }
}

  

 

以上两个基本相似,其差别就在于一个是监听(服务器端),一个是主动连接(客户端),见红色代码。

 

下面两个是公共类:

 

发送消息SendMsg.java

 

 package TcpChat;

import java.awt.Cursor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JButton;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import java.io.DataOutputStream;
import java.io.IOException;

/**
 * 发送
 *
 */
public class SendMsg extends KeyAdapter implements ActionListener,FocusListener{
 
    private JTextField field;
    private JTextArea area;
    private DataOutputStream dos;
    private JButton button;
    private JButton clear;
    
    public SendMsg(DataOutputStream d,JTextField f,JButton b,JTextArea a,JButton c){
     this.dos = d;
     this.field = f;
        this.button = b;
        this.area = a;
        this.clear = c;
    }
    
    @Override
    public void keyTyped(KeyEvent e) {
          if(e.getKeyChar()==(char)KeyEvent.VK_ENTER){
            String s = field.getText();
            try{
                area.append("你说:"+s+"\n");
                dos.writeUTF(s+"\n");
                if(s.equals("bye")){
                    dos.close();
                    area.setText("自己下线,程序退出!");
                    System.exit(0);
                }
                field.setText("");
            }catch(IOException ee){
                ee.printStackTrace();
            }       
        }
    }
    
    public void actionPerformed(ActionEvent e){
        if(e.getActionCommand().equals("发送")){
            String s = field.getText();
            try{
                area.append("你说:"+s+"\n");
                dos.writeUTF(s+"\n");
                if(s.equals("bye")){
                    dos.close();
                    area.setText("自己下线,程序退出!");
                    System.exit(0);
                }
                field.setText("");
            }catch(IOException ee){
                ee.printStackTrace();
            }
        } 
        if(e.getActionCommand().equals("清屏")){
            area.setText("");
        }
    }

    public void focusGained(FocusEvent e) {
        Cursor cursor = new Cursor(Cursor.TEXT_CURSOR);
        field.requestFocusInWindow();
    }

    public void focusLost(FocusEvent e) {}
    
}

  

 

接收消息ReceiveMsg.java

 

package TcpChat;

import java.io.DataInputStream;
import java.io.IOException;

import javax.swing.JTextArea;

/**
 * 接收
 *
 */
public class ReceiveMsg extends Thread{
 
    private DataInputStream dis;
    private JTextArea area;
    
    public ReceiveMsg(DataInputStream d,JTextArea a){
        this.dis = d;
        this.area = a;
    }
    
    public void run(){
        String s;
        while(true){
            try{
                s = dis.readUTF();
                area.append("对方说:"+s);
                if(s.equals("bye")){
                    dis.close();
                    area.setText("对方下线,程序退出!");
                    break;
                } 
            }catch(IOException e){
                e.printStackTrace();
            }
        }
    }
}

 

 

 

该程序只具有简单的聊天功能,主要是为了分析socket 通信中服务器和客户端的差异,未考虑关闭程序时关闭端口等因素。附上Eclipse3.4下高度的项目~下载后,直接导入即可运行~

 

 

 

  • 大小: 40.9 KB
  • 大小: 38.8 KB
分享到:
评论

相关推荐

    基于QT5编写的TCP SOCKET通信小demo程序,通讯数据用QJSON封装。

    总的来说,这个基于QT5的TCP SOCKET通信小demo程序,不仅展示了如何使用QT5进行GUI编程,还涵盖了TCP通信的基本原理以及如何利用QJSON库进行数据交换。对于初学者而言,这是一个很好的学习资源,可以帮助他们理解...

    QT TCP Socket 通信示例

    通过理解并实践这个QT TCP Socket通信示例,开发者可以轻松地构建跨平台的网络应用程序,无论是简单的文件传输还是复杂的实时数据交互,都能得心应手。这个示例代码(QT Socket Demo)将提供一个直观的起点,帮助...

    好用的Tcp Socket调试工具

    在IT行业中,网络编程是不可或缺的一部分,而TCP Socket通信作为网络通信的基础,其调试工作尤为重要。标题提到的“好用的Tcp Socket调试工具”显然是一款能够帮助开发者解决TCP Socket通信问题的有效辅助软件。描述...

    Tcp_Socket.rar_Socket通信界面_TCP_Socket_发送和接收_基于Socket

    在描述中提到了“socket通信界面”,这意味着我们需要创建一个图形用户界面(GUI)来让用户更直观地操作Socket通信。对于Java,我们可以使用Swing或JavaFX库来构建GUI,创建按钮、文本框等组件,供用户输入服务器...

    套接字(Socket)通信TCP聊天程序(含界面)

    本文将深入探讨“套接字(Socket)通信TCP聊天程序(含界面)”这一主题,包括如何使用Java中的Socket和ServerSocket类创建TCP聊天程序,并结合Swing或AWT库构建图形用户界面。 TCP(Transmission Control Protocol...

    基于QT的TCP socket通信编程 .doc

    QT基础知识与TCP Socket通信编程 QT简介 -------- QT是一个跨平台的C++图形用户界面应用程序框架,由诺基亚公司开发。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。QT是完全面向对象的,很容易...

    Tcp Socket client实例

    在IT行业中,TCP Socket通信是网络编程的基础,广泛应用于各种客户端-服务器应用程序。"Tcp Socket client 实例"指的是一个使用TCP协议的客户端示例程序,它通过Socket接口与服务器进行数据交互。事件驱动是一种编程...

    WIN32 TCPsocket

    总结起来,这个项目提供了一个使用QT5.1和Winsock在Windows 32位系统上实现TCPsocket通信的实例,对于学习和理解如何在QT环境下编写TCP客户端和服务器程序具有很好的参考价值。通过阅读代码、注释和实践,开发者可以...

    基于socket通信的,利用MFC实现TCP通信的C/S架构程序

    1. **基于Socket通信**:Socket是操作系统提供的接口,允许应用程序进行网络通信。在MFC中,`CSocket`类是`CWinSocket`的派生类,它为TCP和UDP提供了更高级别的抽象,简化了网络编程。 2. **利用MFC实现TCP通信**:...

    tcpsocket通信示例代码--基于Qt

    首先,我们来看标题——"tcpsocket通信示例代码--基于Qt"。这意味着我们将讨论如何在Qt中实现TCP(传输控制协议)的客户端和服务端通信。TCP是一种面向连接的、可靠的传输层协议,它确保数据的顺序和完整性,适合于...

    TCP连接,Socket通信,前后断通信

    本文将深入探讨TCP连接、Socket通信以及前后端通信的相关知识点。 首先,TCP连接是基于TCP协议的两台主机之间建立的一种双向通信链路。在TCP连接的建立过程中,通常会经历三次握手,即SYN(同步序列编号)、SYN+ACK...

    TCP通信程序Winsock2版(无界面)

    本文将详细解析"TCP通信程序Winsock2版(无界面)"的相关知识点。 首先,TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议,它保证了数据在互联网上的完整性和顺序性。在C++中实现TCP通信...

    TCP.rar_delphi socket tcp_socket 上位机_socket上位机_tcp 上位机_tcp通信软件

    在给定的上下文中,我们关注的是如何使用Delphi编程语言来实现TCP Socket通信,特别是在上位机(通常指的是PC或服务器端)的应用。 TCP/IP模型是互联网通信的基础,其中TCP位于传输层,它提供了面向连接、可靠的...

    TcpClient和TcpSocket写的聊天软件

    在我们的例子中,SyncChatServer会创建一个TcpListener,监听指定的端口,当有新的客户端连接时,它会创建一个新的TcpSocket来处理这个连接。每个连接都对应一个单独的线程,以便同时处理多个客户端。 在聊天软件的...

    基于Tcp socket通信的Pyqt5仿QQ

    综上所述,基于Tcp socket通信的Pyqt5仿QQ项目涉及了网络编程、数据库操作和GUI设计等多个方面。通过这个项目,开发者可以深入学习Python的网络通信能力,以及如何利用PyQt5构建功能丰富的桌面应用。同时,结合MySQL...

    Python实现的多人聊天室源码,基于socket tcp通信,使用tkinter做客户端界面,含可执行文件

    在本项目中,我们探讨的是一个使用Python编程语言实现的多人聊天室,它基于socket TCP通信协议,并且利用Tkinter库构建了用户友好的客户端界面。这个聊天室系统允许多个用户同时在线交流,增强了实时互动性。以下是...

    使用socket进行通信程序设计.pdf

    Socket通信程序设计 本资源摘要信息将对 Socket 通信程序设计的主要概念和技术进行详细的介绍,并对 C# 语言实现的网络聊天室进行深入的分析。 一、Socket 通信程序设计概述 Socket 通信程序设计是基于 TCP/IP ...

    TCP.zip_socket通信

    总结来说,实现“多客户的TCP Socket通信”需要对TCP协议有深入理解,掌握Socket编程技巧,并能灵活运用多线程或异步I/O模型。同时,结合GUI技术,可以构建出模拟QQ聊天的应用,实现多用户之间的实时交流。在实际...

    c#socket通信程序

    本实验项目“C# Socket通信程序”旨在教授如何利用C#进行网络通信,特别是用户之间的同步通信以及文件传输功能。下面将详细介绍这个项目涉及的关键知识点。 1. **C# Socket类**: C#中的Socket类是基于TCP/IP协议...

Global site tag (gtag.js) - Google Analytics