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协议局域网聊天软件,实现个人聊天,群聊,发送文件和文件夹功能
c#版基于UDP协议局域网聊天工具demo实例及源代码。。。
基于UDP协议的局域网聊天工具
用C++写的一个局域网聊天程序,包括服务端和客户端
可以发送表情,文字,基于UDP协议开发的一款聊天工具。
基于UDP协议的局域网聊天程序。vc++6.0编写。点对点模式。运行程序后输入对方机器IP地址,即可进行聊天。单台计算机可以测试。测试Ip:127.0.0.1(大家应该都知道)
这是河北联合大学TCP/IP课程设计所用到的关于udp局域网聊天设计的有关报告和代码,绝对可用!JAVA语言开发!
且必须按提示输入信息),本程序基于UDP协议,并且利用多线程编程实现了程序的背景音乐(系统的Beep声音必须打开才能听见)以及正常退出功能(点右上角的“差”是非正常退出!),当初设计的时候使得两个Client端口...
基于udp协议的局域网的文本聊天程序源码,通过输入对方的ip地址,就可发送消息
个人用C# UDP协议开发的局域网聊天程序,C/S 欢迎大家下载学习
采用udp协议 实现局域网聊天 有源代码。即时通信。。服务端客户端
基于P2P的局域网聊天工具源码,使用UDP协议 非常好 大家下来研究下吧!
本课题是开发一个基于UDP的局域网聊天系统,运用软件工程的设计流程,综合运用数据库编程技术、Windows程序设计技术、网络通讯技术,以Visual C++ 6.0作为系统前台应用程序开发工具,MySQL和Berkeley DB作为后台...
这是我用PB11制作的,利用UDP协议技术,在局域网聊天的工具,刚开始想加入文件传输功能,后来尝试了一下觉得利用UDP来传输文件控制和校验太复杂了,这部分注释掉了。聊天程序还是很完善的。希望高人能够完善文件传输...
C#基于改写udp协议的聊天程序:基本的UDP通讯有丢包现象,并且在网络拥堵时先后顺序可以混乱,Internet网络中通讯时,UDP数据包超过548字节会引起错误。因此在参考了飞鸽传输等局域网通讯程序后,重新封装了UDP通讯...
一个基于UDP的局域网聊天室。
用vb.net udp实现局域网聊天 用UDP协议,做一个局域网聊天的程序
期末做的局域网聊天系统,开发工具为qt4,主要用了UDP,TCP两个网络协议已完成答辩,并且获得优秀,有需要的朋友可以下载来看一下。
C#实现的以UDP协议通信的局域网聊天软件,含有客户端和服务器,客户端发送的信息首先达到服务器,服务器转发给目的主机,服务器可以监控客户端的聊天情况。客户端也可以和服务器聊天。程序开始时先设置服务器IP地址...
采用UDP协议编写,不需要服务器,只要在局域网内即可聊天,在网络不好的情况下在线人数显示不准确,程序有待完善 程序已经打包成JAR双击即可运行,需要代码反编译即可得到