网络协议课程设计基于UDP的多人聊天系统源代码.docx
- 文档编号:603419
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:13
- 大小:310.16KB
网络协议课程设计基于UDP的多人聊天系统源代码.docx
《网络协议课程设计基于UDP的多人聊天系统源代码.docx》由会员分享,可在线阅读,更多相关《网络协议课程设计基于UDP的多人聊天系统源代码.docx(13页珍藏版)》请在冰点文库上搜索。
网络协议课程设计基于UDP的多人聊天系统源代码
基于UDP的多人聊天系统
只需把两个客户段代码与一个服务器代码导入就可以了,记得要把服务器ip:
192.168.1.77(也可以自己在服务器程序中改一下),每个客户端需要设置一下ip,比如A客户端:
192.168.1.78,B客户端:
192.168.1.88,A客户端向B客户端通讯时,“请输入对方ip”,这项改为192.168.1.88,就可以了。
客户端源代码程序:
ChatFram.java
packageChatFrame_01;
import.*;
importjava.io.*;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.lang.*;
importjava.awt.color.*;
importjavax.swing.JOptionPane;
publicclassChatFrameextendsJFrame{
JPanelcontentPane;
JLabellabel1=newJLabel();//发送消息
JLabellabel2=newJLabel();//输入ip
Labellabel3=newLabel();//输入端口标签
Labellabel4=newLabel();//输出端口标签
JTextFieldtextField1=newJTextField();//发送消息
JTextFieldtextField2=newJTextField();//输入ip
JTextFieldtextField3=newJTextField();//获得输入端口
JTextFieldtextField4=newJTextField();//获得输出端口
JButtonbutton1=newJButton("发送");//发送消息
TextAreatextArea1=newTextArea();
JOptionPanejopane=newJOptionPane();
DatagramPacketsendpacket,receivepacket;//声明发送和接收数据包
DatagramSocketsendsocket,receivesocket;//声明发送和接收DatagramSocket
publicChatFrame(){
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try{
toInit();
}catch(Exceptione){
e.printStackTrace();
}
}
privatevoidtoInit()throwsException{
contentPane=(JPanel)this.getContentPane();
label1.setText("发送信息:
");
label1.setBounds(newRectangle(13,100,60,21));
contentPane.setLayout(null);
contentPane.setBackground(Color.pink);
this.setSize(newDimension(363,502));
this.setTitle("多人聊天室");
label2.setText("输入对方IP地址:
");
label2.setBounds(newRectangle(12,19,109,23));
label3.setText("输入端口:
");
label3.setBounds(newRectangle(12,58,55,22));
label4.setText("输出端口:
");
label4.setBounds(newRectangle(180,58,55,22));
textField3.setText("3000");
textField4.setText("3001");
button1.setBounds(newRectangle(280,100,59,21));
button1.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(ActionEvente){
button1_actionPerformed(e);
}
});
textField1.addKeyListener(newKeyAdapter(){
publicvoidkeyPressed(KeyEvente){
if(e.getKeyCode()==KeyEvent.VK_ENTER){
Stringstr=textField2.getText();
Stringstr1=textField1.getText();
if(pareTo("")!
=0&&!
"".equals(str1)){
try{
textArea1.append("\nto"+textField2.getText()
+":
"+"3000"+"say:
"
+textField1.getText());
Strings=textField1.getText();
bytedata[]=s.getBytes("UTF-8");
sendpacket=newDatagramPacket(
data,
data.length,
InetAddress.getByName("192.168.1.77"),
6666);
sendsocket.send(sendpacket);
}catch(IOExceptionexc){
exc.printStackTrace();
}
textField1.setText("");
}
}
}
});
textField4.setBounds(newRectangle(240,58,90,22));
textField3.setBounds(newRectangle(70,58,90,22));
textField2.setBounds(newRectangle(123,20,120,19));
textField1.setBounds(newRectangle(76,100,190,19));
textArea1.setBounds(newRectangle(11,140,333,315));
textArea1.setEditable(false);
textArea1.setBackground(Color.white);
contentPane.add(label4,null);
contentPane.add(label3,null);
contentPane.add(label2,null);
contentPane.add(label1,null);
contentPane.add(textField1,null);
contentPane.add(textField2,null);
contentPane.add(textField3,null);
contentPane.add(textField4,null);
contentPane.add(textArea1,null);
contentPane.add(button1,null);
this.setVisible(true);
bind();
}
protectedvoidprocessWindowEvent(WindowEvente){
super.processWindowEvent(e);
if(e.getID()==WindowEvent.WINDOW_CLOSING){
System.exit(0);
}
}
publicvoidwaitforpackets(){//检测并接受对方发来的消息
while(true){
try{
byte[]array=newbyte[100];
receivepacket=newDatagramPacket(array,array.length);
receivesocket.receive(receivepacket);//接收
textArea1.append("\nfrom"+receivepacket.getAddress()+":
"
+receivepacket.getPort()+"get:
");
Stringreceived=newString(receivepacket.getData(),0,
receivepacket.getLength(),"UTF-8");
textArea1.append(received);
}catch(IOExceptionse){
se.printStackTrace();
}
}
}
voidbind(){//和对方建立连
try{
sendsocket=newDatagramSocket(3000);
receivesocket=newDatagramSocket(3333);
}catch(Exceptione){
}
}
voidbutton1_actionPerformed(ActionEvente){//发送消息到对方
Stringstr=textField2.getText();
Stringstr1=textField1.getText();
if(pareTo("")!
=0&&!
"".equals(str1)){
try{
textArea1.append("\nto"+textField2.getText()+":
"+"3000"
+"say:
"+textField1.getText());
Strings=textField2.getText()+"|"+textField1.getText();
bytedata[]=s.getBytes("UTF-8");
sendpacket=newDatagramPacket(data,data.length,InetAddress
.getByName("192.168.1.77"),6666);
sendsocket.send(sendpacket);
}catch(IOExceptionexc){
exc.printStackTrace();
}
textField1.setText("");
}
}
}
ChatApp.java
packageChatFrame_01;
importjava.io.*;
importjavax.swing.UIManager;
importjava.awt.*;
publicclassChatApp{
booleanpackFrame=false;
ChatApp(){
ChatFrameframe=newChatFrame();
if(packFrame){
frame.pack();
}else{
frame.validate();
}
//放置窗体在屏幕中央
DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();
DimensionframeSize=frame.getSize();
if(frameSize.height>screenSize.height){
frameSize.height=screenSize.height;
}
if(frameSize.width>screenSize.width){
frameSize.width=screenSize.width;
}
frame.setLocation((screenSize.width-frameSize.width)/2,
(screenSize.height-frameSize.height)/2);
frame.setVisible(true);
frame.waitforpackets();
}
publicstaticvoidmain(String[]args){
newChatApp();
}
}
服务器端:
Server.java
packageChatFrame_01;
import.DatagramPacket;
import.DatagramSocket;
import.InetAddress;
import.Socket;
importjava.util.*;
publicclassServer{
Listips=newArrayList();
DatagramSocketsocket;
DatagramPacketpacket;
DatagramSocketssocket;
DatagramPacketspacket;
publicServer()throwsException{
socket=newDatagramSocket(6666);
ssocket=newDatagramSocket(8888);
}
publicvoidlisten()throwsException{
byte[]array=newbyte[100];
packet=newDatagramPacket(array,array.length);
socket.receive(packet);
byte[]data=packet.getData();
Stringreceived=newString(data,0,data.length,"UTF-8");
System.out.println(received);
String[]ss=received.split("\\|");
Stringip=ss[0];
byte[]dt=ss[1].getBytes("UTF-8");
spacket=newDatagramPacket(dt,dt.length,InetAddress.getByName(ip),3333);
ssocket.send(spacket);
}
publicstaticvoidmain(String[]args)throwsException{
Servers=newServer();
while(true){
s.listen();
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 协议 课程设计 基于 UDP 聊天 系统 源代码