import java.io.*; import java.net.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class TCPTalk extends JFrame implements ActionListener{ public static void main(String[] args){ new TCPTalk(); } JLabel jl_state,jl_purpose,jl_receive,jl_name; JTextField jt_state,jt_purpose,jt_name,jt_sendmeg; JButton jb_connection,jb_uncon,jb_sendmeg; JTextArea textArea; JRadioButton ServerRadio,ClientRadio; JPanel jp1,jp2,jp3,jp4; JScrollPane megJScrollPane; String meg; TCP_server t1; TCP_client t2; ServerSocket serversocket; Socket Ssocket,Csocket; BufferedReader in1; PrintWriter out1; public TCPTalk(){ super("TCP聊天"); Container cont=getContentPane(); cont.setLayout(null); ButtonGroup bg = new ButtonGroup(); ServerRadio = new JRadioButton("服务器",true); ServerRadio.setSize(80,20); ServerRadio.setFont(new Font("宋体",Font.BOLD,14)); ServerRadio.setLocation(10,20); bg.add(ServerRadio); cont.add(ServerRadio); ClientRadio = new JRadioButton("客户端",false); ClientRadio.setSize(80,20); ClientRadio.setFont(new Font("宋体",Font.BOLD,14)); ClientRadio.setLocation(100,20); cont.add(ClientRadio); bg.add(ClientRadio); jl_state=new JLabel("连接状态"); jl_state.setSize(100,20); jl_state.setFont(new Font("宋体",Font.BOLD,14)); jl_state.setLocation(190,20); cont.add(jl_state); jt_state = new JTextField("离线"); jt_state.setBackground(Color.gray); jt_state.setSize(100,20); jt_state.setFont(new Font("宋体",Font.PLAIN,14)); jt_state.setLocation(320,20); cont.add(jt_state); jl_purpose=new JLabel("连接主机IP"); jl_purpose.setSize(100,20); jl_purpose.setFont(new Font("宋体",Font.BOLD,14)); jl_purpose.setLocation(10,50); cont.add(jl_purpose); jt_purpose=new JTextField("127.0.0.1"); jt_purpose.setForeground(Color.orange); jt_purpose.setSize(250,20); jt_purpose.setLocation(120,50); cont.add(jt_purpose); jb_connection=new JButton("连接"); jb_connection.setSize(100,20); jb_connection.setFont(new Font("宋体",Font.BOLD,14)); jb_connection.setLocation(380,50); cont.add(jb_connection); jb_connection.addActionListener(this); jl_receive=new JLabel("接受到的信息"); jl_receive.setSize(100,20); jl_receive.setFont(new Font("宋体",Font.BOLD,14)); jl_receive.setLocation(10,80); cont.add(jl_receive); textArea = new JTextArea(); textArea.setForeground(Color.red); textArea.setLineWrap(true); textArea.setSize(250,200); textArea.setFont(new Font("宋体",Font.BOLD,12)); megJScrollPane = new JScrollPane(textArea); megJScrollPane.setSize(250,200); megJScrollPane.setLocation(120,80); cont.add(megJScrollPane); jb_uncon=new JButton("结束连接"); jb_uncon.setSize(100,20); jb_uncon.setFont(new Font("宋体",Font.BOLD,14)); jb_uncon.setLocation(380,80); cont.add(jb_uncon); jb_uncon.addActionListener(this); jl_name=new JLabel("你的昵称"); jl_name.setSize(100,20); jl_name.setFont(new Font("宋体",Font.BOLD,14)); jl_name.setLocation(10,260); cont.add(jl_name); jt_name=new JTextField(); jt_name.setSize(100,20); jt_name.setFont(new Font("宋体",Font.BOLD,14)); jt_name.setLocation(10,300); cont.add(jt_name); jt_sendmeg=new JTextField(); jt_sendmeg.setSize(250,20); jt_sendmeg.setFont(new Font("楷体",Font.BOLD,14)); jt_sendmeg.setLocation(120,300); cont.add(jt_sendmeg); jb_sendmeg=new JButton("发送信息"); jb_sendmeg.setSize(100,20); jb_sendmeg.setFont(new Font("楷体",Font.BOLD,14)); jb_sendmeg.setLocation(380,300); cont.add(jb_sendmeg); jb_sendmeg.addActionListener(this); t1=new TCP_server(); t2=new TCP_client(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(500, 400); setVisible(true); setResizable(false); } public void actionPerformed(ActionEvent e){ if(e.getSource()==jb_connection)//判断是否按下连接按钮 { if(ServerRadio.isSelected()==true)//判断是否选为服务器端 { meg= ""; jt_sendmeg.setText(""); t1.start(); }else{ meg= ""; jt_sendmeg.setText(""); t2.start(); } } if(e.getSource()==jb_sendmeg) { out1.write(jt_name.getText()+"说:"+jt_sendmeg.getText()+"\n"); textArea.append("我说:"+jt_sendmeg.getText()+"\n"); out1.flush(); jt_sendmeg.setText(""); } if(e.getSource()==jb_uncon) { try{ if(ServerRadio.isSelected()==true){ Ssocket.close(); serversocket.close(); jt_state.setText("离线"); jt_state.setBackground(Color.gray); jb_sendmeg.setEnabled(false); jb_uncon.setEnabled(false); jb_connection.setEnabled(true); }else{ Csocket.close(); jt_state.setText("离线"); jt_state.setBackground(Color.gray); jb_sendmeg.setEnabled(false); jb_uncon.setEnabled(false); jb_connection.setEnabled(true); } }catch(IOException e2) { jt_state.setText("发生错误!"); } } } class TCP_server extends Thread{ public TCP_server(){ } public void run() { try{ jb_connection.setEnabled(false); jb_uncon.setEnabled(true); jt_state.setText("等待连接..."); jt_purpose.setText(InetAddress.getLocalHost().getHostAddress()); serversocket=new ServerSocket(8000); Ssocket=serversocket.accept(); in1=new BufferedReader(new InputStreamReader(Ssocket.getInputStream())); out1=new PrintWriter(Ssocket.getOutputStream(),true); while(true){ if(Ssocket.isBound()==true){ jt_state.setText("通话中..."); jt_state.setBackground(Color.green); jb_uncon.setEnabled(true); jb_sendmeg.setEnabled(true); break; } } while(true) { meg=in1.readLine(); if(meg.length()>0) { textArea.append(meg); textArea.append("\n"); } } }catch(IOException e){} } } class TCP_client extends Thread{ public TCP_client(){ } public void run() { try{ jb_connection.setEnabled(false); jt_state.setText("等待连接..."); Csocket=new Socket(); Csocket.connect(new InetSocketAddress(jt_purpose.getText(),8000),5000); in1= new BufferedReader(new InputStreamReader(Csocket.getInputStream())); out1=new PrintWriter(Csocket.getOutputStream(),true); while(true){ if(Csocket.isConnected()==true){ jt_state.setText("通话中..."); jt_state.setBackground(Color.green); jb_uncon.setEnabled(true); jb_sendmeg.setEnabled(true); break; } } meg= ""; while(Csocket.isConnected()==true){ meg=in1.readLine(); if(meg.length()>0){ textArea.append(meg); textArea.append("\n"); } } }catch(IOException e){ jt_state.setText("无法连接到指定服务器!"); } } } }
相关推荐
标题中的“使用C#编写的UDP协议局域网聊天软件”揭示了该程序的核心技术和应用场景。UDP(User Datagram Protocol)是一种无连接的、不可靠的传输层协议,它以较小的开销提供快速的数据传输,适合实时性要求高的应用...
本项目是一个基于UDP协议实现的局域网聊天程序,它由服务端和客户端两部分组成,使用C++编程语言,并结合了Microsoft Foundation Class (MFC)库来构建图形用户界面。 【描述】:“用C++写的一个局域网聊天程序,...
【标题】:“基于UDP协议的局域网聊天工具”指的是一个设计用于在局域网内实现用户间通信的应用程序,该应用是通过用户数据报协议(UDP)来传输数据的。UDP是一种无连接的、不可靠的传输层协议,与TCP(传输控制协议...
【基于UDP协议的聊天工具】是一款使用C#编程语言实现的通信软件,它利用了用户数据报协议(UDP)来实现实时的数据传输。UDP是一种无连接的、不可靠的传输协议,它在互联网协议栈中位于传输层,相较于TCP协议,它的...
1. **UDP协议基础**:UDP不提供像TCP那样的连接建立与释放,也不保证数据包的顺序、可靠性和错误检测。它将数据包直接发送到网络上,每个数据包称为一个用户数据报。这意味着开发者需要自己处理数据的排序和错误检查...
在本文中,我们将深入探讨如何使用C#编程语言构建一个基于UDP协议的局域网简单聊天工具。UDP(User Datagram Protocol)是一种无连接的、不可靠的传输协议,常用于实时数据传输,如在线游戏、视频会议等,因为它提供...
【标题】"基于P2P UDP的局域网聊天工具源码" 描述了一款使用P2P(点对点)技术并通过UDP(用户数据报协议)进行通信的局域网聊天工具。这款源码提供了深入理解P2P网络和UDP通信在实际应用中的机会,适合开发者学习和...
【标题】"C#基于UDP的局域网聊天程序"是一个使用C#编程语言实现的、基于用户数据报协议(UDP)的局域网通信工具。UDP是一种无连接的、不可靠的传输协议,常用于实时数据传输如语音、视频等,因为它提供了较低的延迟...
基于UDP协议的局域网聊天程序。vc++6.0编写。点对点模式。运行程序后输入对方机器IP地址,即可进行聊天。单台计算机可以测试。测试Ip:127.0.0.1(大家应该都知道)
本项目“基于UDP局域网聊天软件的设计与实现”就是利用UDP协议来构建一个简单的即时通信系统,允许在同一局域网内的设备之间进行快速的信息交流。 【描述】:“采用udp协议 实现局域网聊天 有源代码。即时通信。...
且必须按提示输入信息),本程序基于UDP协议,并且利用多线程编程实现了程序的背景音乐(系统的Beep声音必须打开才能听见)以及正常退出功能(点右上角的“差”是非正常退出!),当初设计的时候使得两个Client端口...
【标题】:“基于UDP协议的局域网端到端聊天程序” 这个项目是关于实现一个简单的局域网内的文本聊天程序,它利用了无连接的用户数据报协议(UDP)来传输信息。UDP是一种在网络应用中广泛使用的传输层协议,与TCP...
标题"用C# UDP协议开发的局域网聊天程序"指的是一个基于C#编程语言,利用用户数据报协议(UDP)来实现的局域网内的即时通讯应用。UDP是一种无连接的传输层协议,常用于对实时性要求较高的应用场景,如在线游戏、视频...
在本文中,我们将深入探讨如何构建一个简单的基于UDP的局域网聊天程序,以及涉及的相关知识点。 首先,UDP的特点是轻量级和高效。它不提供诸如流量控制、拥塞控制或连接建立等服务,这使得它非常适合于实时应用,如...
【作品名称】:基于Kotlin 实现的TCP与UDP的局域网聊天安卓APP,支持聊天和收发文件 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 ...
首先,我们要理解UDP协议。UDP是一种无连接的、不可靠的传输层协议,它不保证数据包的顺序、完整性和可靠性,而是以尽可能快的速度发送数据。在局域网聊天室中,由于数据传输速度要求高且对数据丢失容忍度较高,UDP...
通过这个项目,开发者不仅可以学习到MFC的基本用法,还能深入理解网络编程,尤其是UDP协议的应用和问题解决。对于初学者来说,这是一个很好的实践项目,可以帮助他们在理论与实践中找到平衡,提升技能。对于存在的...
这是一个基于UDP协议实现的局域网聊天程序,它利用了Windows SDK中的Socket接口进行网络通信。UDP(User Datagram Protocol)是一种无连接的、不可靠的传输层协议,它相较于TCP而言,具有更低的延迟和更高的效率,...
1. **UDP协议**:UDP不提供可靠的数据传输服务,没有像TCP那样的拥塞控制、顺序控制和重传机制。因此,开发者需要自己处理数据包丢失、重复或乱序的问题。这使得UDP更适合实时通信,因为它减少了额外的延迟。 2. **...