• 大小: 75KB
    文件类型: .7z
    金币: 1
    下载: 0 次
    发布日期: 2021-06-06
  • 语言: 其他
  • 标签: tcp  

资源简介

这是计算机网络课程设计,TCP文件传输、UDPQQ聊天配套的服务器端。

资源截图

代码片段和文件信息

package cn.edu.ldu;

import cn.edu.ldu.util.Message;
import cn.edu.ldu.util.Translate;
import cn.edu.ldu.util.User;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

import java.util.ArrayList;

import java.util.Iterator;
import java.util.List;


/**
 * ReceiveMessage,服务器接收消息和处理消息的线程类
 * @author 南京农业大学 19215227 计科152 程柯
 */
public class ReceiveMessage extends Thread {
    private final DatagramSocket serverSocket; //服务器套接字
    private DatagramPacket packet;  //报文
    private final List userList=new ArrayList<>(); //用户列表
   protected List fileList=new ArrayList<>(); //文件列表
    private final byte[] data=new byte[8096]; //8K字节数组
    private String str;
    private final ServerUI parentUI; //消息窗口  
    /**
     * 构造函数
     * @param socket 会话套接字
     * @param parentUI 父类
     */
    public ReceiveMessage(DatagramSocket socketServerUI parentUI) {
        serverSocket=socket;
        this.parentUI=parentUI;
    }
    @Override
    public void run() {  
        while (true) { //循环处理收到的各种消息
            try {
            packet=new DatagramPacket(datadata.length);//构建接收报文
            serverSocket.receive(packet);//接收客户机数据
            //收到的数据转为消息对象
            Message msg=(Message)Translate.ByteToobject(packet.getData());
            String userId=msg.getUserId();//当前消息来自用户的id 
            System.out.println(userId);
            if (msg.getType().equalsIgnoreCase(“M_LOGIN“)) { //是M_LOGIN消息 
                Message backMsg=new Message();
                //假定只有2000、3000、8000三个帐号可以登录
                if (!userId.equals(“2000“) && !userId.equals(“3000“) && !userId.equals(“8000“) && !userId.equals(“19215227“) ) {//登录不成功
                    backMsg.setType(“M_FAILURE“);
                    byte[] buf=Translate.objectToByte(backMsg);
                    DatagramPacket backPacket=new DatagramPacket(bufbuf.lengthpacket.getAddress()packet.getPort());//向登录用户发送的报文
                    serverSocket.send(backPacket); //发送                  
                }else { //登录成功
                    backMsg.setType(“M_SUCCESS“);
                    byte[] buf=Translate.objectToByte(backMsg);
                    DatagramPacket backPacket=new DatagramPacket(bufbuf.lengthpacket.getAddress()packet.getPort());//向登录用户发送的报文
                    serverSocket.send(backPacket); //发送
                    User user=new User();
                    user.setUserId(userId); //用户名
                    user.setPacket(packet); //保存收到的报文
                    userList.add(user); //将新用户加入用户列表
                    
                    Iterator it = fileList.iterator();
                    while(it.hasNext()){
                        String x = it.next();
                        it.remove();
                    }
                    java.io.File filename=new java.io.File(“./upload/“);
                        if(filename.isDirectory()){
    

评论

共有 条评论