精华内容
下载资源
问答
  • Java编写的聊天系统,类似QQ。实现文件传输。内置毕业论文,里面包括论文和开题。实现文件传输和添加和删除好友等功能
  • 上一篇 java socket编程(3)——利用socket实现聊天之群聊 中我们讲到如何使用socket让客户端和客户端之间传递消息,实现一对多的聊天,接下来我将写出如何让服务器建立客户端与客户端之间的文件流传输通道。还是...

    上一篇 java socket编程(3)——利用socket实现聊天之群聊
    中我们讲到如何使用socket让客户端和客户端之间传递消息,实现一对多的聊天,接下来我将写出如何让服务器建立客户端与客户端之间的文件流传输通道。

    还是在原有的代码上加以修改,增加功能。

    1,服务器增加逻辑

    ChatFileServer 接收文件的另一套逻辑,虽然独立出来了,也可以和接收聊天信息的逻辑合并

    public class ChatFileServer {
        // socket服务
        private static ServerSocket server;
        public Gson gson = new Gson();
    
        /**
         * 初始化socket服务
         */
        public void initServer() {
            try {
                // 创建一个ServerSocket在端口8080监听客户请求
                server = new ServerSocket(SocketUrls.PORT);
                createMessage();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        /**
         * 创建消息管理,一直接收消息
         */
        private void createMessage() {
            FileOutputStream fos = null;
            try {
                System.out.println("等待用户接入 : ");
                // 使用accept()阻塞等待客户请求
                Socket socket = server.accept();
                System.out.println("用户接入 : " + socket.getPort());
                // 开启一个子线程来等待另外的socket加入
                new Thread(new Runnable() {
                    public void run() {
                        // 再次创建一个socket服务等待其他用户接入
                        createMessage();
                    }
                }).start();
                // 用于服务器推送消息给用户
                getMessage(socket);
                // 从客户端获取信息
                InputStream is = socket.getInputStream();
                // 从客户端获取信息
                BufferedReader bff = new BufferedReader(new InputStreamReader(is));
                // 循环一直接收当前socket发来的消息
                while (true) {
                    Thread.sleep(500);
                    int length = 0;
                    byte[] b = new byte[1024];
                    String json = null;
                    // 1、首先先得到实体类
                    while ((json = bff.readLine()) != null) {
                        // json = new String(b);
                        MessageBean messageBean = gson.fromJson(json, MessageBean.class);
                        //如果这不是一个文件消息,则不往下执行
                        if (messageBean.getChatFile() == null)
                            continue;
                        System.out.println("接受到的文件名为:" + messageBean.getChatFile().getFileName());
                        String fileNewName = messageBean.getChatFile().getFileName() + "."
                                + messageBean.getChatFile().getFileTitle();
                        System.out.println("新生成的文件名为:" + fileNewName);
                        //d盘下创建该文件的空文件对象
                        fos = new FileOutputStream("D:\\" + fileNewName);
                        length = 0;
                        int fileSzie = 0;
                        // 2、把socket输入流写到文件输出流中去
                        while ((length = is.read(b)) != -1) {
                            fos.write(b, 0, length);
                            fileSzie += length;
                            System.out.println("当前大小:" + fileSzie);
                            System.out.println("总大小:" + messageBean.getChatFile().getFileLength());
                            //这里通过先前传递过来的文件大小作为参照,因为该文件流不能自主停止,所以通过判断文件大小来跳出循环
                            if (fileSzie == messageBean.getChatFile().getFileLength()) {
                                break;
                            }
                        }
                        fos.close();
                        System.out.println("文件:保存成功");
                        System.out.println("用户 : " + messageBean.getFriendId());
                    }
                }
                // server.close();
            } catch (Exception e) {
                try {
                    if (fos != null)
                        fos.close();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                e.printStackTrace();
                System.out.println("错误 : " + e.getMessage());
            }
    
        }
    
    
        /**
         * 发送消息
         */
        private void getMessage(Socket socket) {
            new Thread(new Runnable() {
                public void run() {
                    try {
                        String buffer;
                        while (true) {
                            // 从控制台输入
                            BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
                            buffer = strin.readLine();
                            // 因为readLine以换行符为结束点所以,结尾加入换行
                            buffer += "\n";
                            // 这里修改成向全部连接到服务器的用户推送消息
                            OutputStream output = socket.getOutputStream();
                            output.write(buffer.getBytes("utf-8"));
                            // 发送数据
                            output.flush();
                        }
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    }

    2,客户端增加逻辑

    1,ChatListActivity 在原有单聊,群聊的基础上增加上传文件

    public class ChatListActivity extends AppCompatActivity implements View.OnClickListener {
    
        private LinearLayout friend_ly, group_ly, file_ly;
        //自己在手机根目录放置一个文件
        private final String filePath = Environment.getExternalStorageDirectory() + "/" + "test.gif";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_chatlist);
            friend_ly = (LinearLayout) findViewById(R.id.friend_ly);
            group_ly = (LinearLayout) findViewById(R.id.group_ly);
            file_ly = (LinearLayout) findViewById(R.id.file_ly);
            friend_ly.setOnClickListener(this);
            group_ly.setOnClickListener(this);
            file_ly.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.friend_ly://单聊
                    Intent intent = new Intent(ChatListActivity.this, MainActivity.class);
                    startActivity(intent);
                    break;
                case R.id.group_ly://群聊
                    Intent intent1 = new Intent(ChatListActivity.this, GroupActivity.class);
                    startActivity(intent1);
                    break;
                case R.id.file_ly://传文件
                    ChatAppliaction.chatServer.sendFileMessage(filePath);
                    break;
            }
        }
    }

    2,ChatFileServer 增加上传文件服务逻辑,上传文件的逻辑不能像服务器端代码一样和聊天逻辑合并

    public class ChatFileServer {
        //文件信息实体类
        private MessageFileBean messageFileBean;
        private Gson gson = new Gson();
    
        public void sendFileMessage(Socket socket, String filePath, Handler handler, MessageBean messageBean) {
            if (TextUtils.isEmpty(filePath)) return;
            try {
                if (socket == null) {
                    Message message = handler.obtainMessage();
                    message.what = 1;
                    message.obj = "服务器已经关闭";
                    handler.sendMessage(message);
                    return;
                }
                //要传输的文件路径
                File file = new File(filePath);
                //说明不存在该文件
                if (!file.exists()) return;
                //说明该文件是一个文件夹
                if (file.isDirectory()) return;
                messageFileBean = new MessageFileBean();
                /**
                 * 传入的文件长度很重要,服务器判断客户端文件是否结束的重要依据,
                 * 必须和你传的文件长度一直,
                 * 如果不一致服务器端则不能自行结束文件流或者提前结束文件流,
                 *
                 * 这么做的原因是因为文件流的最后不能像字符流的最后加上\n来让服务器知道已经结束
                 * 所以手动判断文件传输长度一致以后结束传输
                 * */
                messageFileBean.setFileLength(file.length());
                //文件名
                messageFileBean.setFileName("test");
                //文件id
                messageFileBean.setFileId(1);
                //文件类型
                messageFileBean.setFileType("image");
                //文件后缀
                messageFileBean.setFileTitle("gif");
                //messageFileBean.setFileByte(getBytes(file));
                messageBean.setChatFile(messageFileBean);
                OutputStream outputStream = socket.getOutputStream();
                String json = gson.toJson(messageBean) + "\n";
                //1、发送文件信息实体类
                outputStream.write(json.getBytes("utf-8"));
                //将文件写入流
                FileInputStream fis = new FileInputStream(file);
                //每次上传1M的内容
                byte[] b = new byte[1024];
                int length;
                int fileSize = 0;//实时监测上传进度
                while ((length = fis.read(b)) != -1) {
                    fileSize += length;
                    Log.i("socketChat", "文件上传进度:" + (fileSize / messageFileBean.getFileLength() * 100) + "%");
                    //2、把文件写入socket输出流
                    outputStream.write(b, 0, length);
                }
                //关闭文件流
                fis.close();
                //该方法无效
                //outputStream.write("\n".getBytes());
                outputStream.flush();
            } catch (Exception e) {
                e.printStackTrace();
                Log.e("test", "错误:" + e.toString());
            }
        }
    }

    写到这里代码逻辑已经贴出来了。通过客户端就可以将置顶文件上传到服务器,保存在电脑本地;

    这里虽然只在服务器处理了,保存文件。但是如果从服务器转发给指定好友,其实逻辑都是一样的,有心的人可以自己去完善。

    这里把主要代码贴出来了,以便大家理解。

    既然能够上传文件了,那么,发送语音,传图片,小视频,传文件的功能都能实现了。聊天sdk环信的源码中发送语音之类的功能其实都是传的文件,只不过标识不同而已。

    总结:
    通过socket来实现聊天的基本功能就这些了。1,消息推送;2,单聊;3,群聊;4,传文件;
    当然,还有更高级的做法,比如NIO之类的。这些东西到实际项目用到的时候去优化也是可以的。

    最后,附上socket传文件的Demo

    Demo下载

    展开全文
  • 用户发送信息并提交的时候,后天服务器收到信息,根据用户对象发送给不同对象(群聊或私聊),从map中遍历出指定的聊天对象,存放消息内容的list中加入所发送的信息。 客户在聊天页面中,通过ajax不断的访问后台,查看...

    C/S:采用socket+多线程+io+swing(awt)技术;

    基本思路:在服务器端建立一个连接端口,专门用来让客户端连接服务器端,并且不断的监听客户端的连接请求。当用户请求连接上服务器的时候,为登录的用户开启一个端口,并且把这个端口放入一个全局的list容器中,同时给这个用户分配一个线程,用来不断的监听list容器中的端口是否有新的用户请求连接(或是否有用户发送信息过来),有的话为全部或指定的端口发送信息(io)。

    客户端在连接上服务端后,同时开始一个线程,不断监听服务端是否有信息发送过来。在客户端发送信息的时候,通过socket向服务器端发送信息。

    B/S:一般采用servlet+ajax+js+html

    基本思路:用户登录的时记录下用户的session或把用户信息存放在全局的map容器中,以用户名为key或者session,消息内容存放在一个list容器中,并把存放消息的list容易设为value。用户发送信息并提交的时候,后天服务器收到信息,根据用户对象发送给不同对象(群聊或私聊),从map中遍历出指定的聊天对象,存放消息内容的list中加入所发送的信息。

    客户在聊天页面中,通过ajax不断的访问后台,查看是否有新的信息,有则通过js,把信息在页面中显示出来。

    展开全文
  • java实现聊天软件

    2008-12-21 18:24:59
    这是用java 实现的基于局域网的C/S模式的聊天工具,可以传文件
  • 基于C/S架构的聊天系统的实现, 运用NIO机制 Socket通信,通过多线程IO操作等技术实现好友添加,删除好友,好友聊天文件功能,可用于java语言的练习与提高
  • 【实例简介】基于C/S架构的聊天系统的实现, 运用NIO机制 Socket通信,通过多线程IO操作等技术实现好友添加,删除好友,好友聊天文件功能,可用于java语言的练习与提高【实例截图】【核心代码】java聊天系统...

    【实例简介】

    基于C/S架构的聊天系统的实现, 运用NIO机制 Socket通信,通过多线程IO操作等技术实现好友添加,删除好友,好友聊天,文件互传功能,可用于java语言的练习与提高

    【实例截图】

    【核心代码】

    java聊天系统(CS)

    └── java聊天系统(CS)

    └── java ---聊天系统(CS)

    ├── QQ_Client

    │   ├── bin

    │   │   ├── Base

    │   │   │   ├── Area_Buffer.class

    │   │   │   ├── Node.class

    │   │   │   ├── Node1.class

    │   │   │   ├── Packet_base.class

    │   │   │   ├── Register_base.class

    │   │   │   ├── Tree.class

    │   │   │   └── Tree2.class

    │   │   ├── Client

    │   │   │   ├── Client.class

    │   │   │   ├── Logic.class

    │   │   │   ├── Node.class

    │   │   │   ├── Node_Logic.class

    │   │   │   ├── Queue.class

    │   │   │   ├── Queue_Logic.class

    │   │   │   ├── Receive.class

    │   │   │   ├── Send.class

    │   │   │   └── Value.class

    │   │   ├── Connect_masql.class

    │   │   ├── File

    │   │   │   ├── Receive.class

    │   │   │   └── Send.class

    │   │   ├── GUI

    │   │   │   ├── GUI$1.class

    │   │   │   ├── GUI.class

    │   │   │   ├── GUI_Login$1.class

    │   │   │   ├── GUI_Login.class

    │   │   │   ├── GUI_Register.class

    │   │   │   ├── GUI_chatView$1.class

    │   │   │   ├── GUI_chatView.class

    │   │   │   ├── GUI_siveFile.class

    │   │   │   ├── GUI_talk.class

    │   │   │   ├── LinkList$Node.class

    │   │   │   ├── LinkList.class

    │   │   │   ├── LinkList_window$Node.class

    │   │   │   ├── LinkList_window.class

    │   │   │   └── Save_File.class

    │   │   ├── Logic

    │   │   │   ├── Add_Logic.class

    │   │   │   ├── Del_Logic.class

    │   │   │   ├── File_Logic.class

    │   │   │   ├── Find_Logic.class

    │   │   │   ├── LinkFrom$Node.class

    │   │   │   ├── LinkFrom.class

    │   │   │   ├── LinkTO$Node.class

    │   │   │   ├── LinkTO.class

    │   │   │   ├── Login_Logic.class

    │   │   │   ├── Main.class

    │   │   │   ├── Out_Logic.class

    │   │   │   ├── Register_Logic.class

    │   │   │   ├── Static_Variable.class

    │   │   │   └── Talk_Logic.class

    │   │   ├── Mysql

    │   │   │   └── Connect.class

    │   │   ├── manifest

    │   │   └── qq_Client

    │   ├── manifest

    │   └── src

    │   ├── Base

    │   │   ├── Area_Buffer.java

    │   │   ├── Packet_base.java

    │   │   ├── Register_base.java

    │   │   ├── Tree.java

    │   │   └── Tree2.java

    │   ├── Client

    │   │   ├── Client.java

    │   │   ├── Logic.java

    │   │   ├── Receive.java

    │   │   ├── Send.java

    │   │   └── Value.java

    │   ├── Connect_masql.java

    │   ├── File

    │   │   ├── Receive.java

    │   │   └── Send.java

    │   ├── GUI

    │   │   ├── GUI.java

    │   │   ├── GUI_Login.java

    │   │   ├── GUI_Register.java

    │   │   ├── GUI_chatView.java

    │   │   ├── GUI_siveFile.java

    │   │   ├── GUI_talk.java

    │   │   ├── LinkList.java

    │   │   ├── LinkList_window.java

    │   │   └── Save_File.java

    │   ├── Logic

    │   │   ├── Add_Logic.java

    │   │   ├── Del_Logic.java

    │   │   ├── File_Logic.java

    │   │   ├── Find_Logic.java

    │   │   ├── LinkFrom.java

    │   │   ├── LinkTO.java

    │   │   ├── Login_Logic.java

    │   │   ├── Main.java

    │   │   ├── Out_Logic.java

    │   │   ├── Register_Logic.java

    │   │   ├── Static_Variable.java

    │   │   └── Talk_Logic.java

    │   ├── Mysql

    │   │   └── Connect.java

    │   └── qq_Client

    ├── QQ_Server

    │   ├── bin

    │   │   ├── Base

    │   │   │   ├── Area_Buffer.class

    │   │   │   ├── Node.class

    │   │   │   ├── Node1.class

    │   │   │   ├── Packet_base.class

    │   │   │   ├── Register_base.class

    │   │   │   ├── Tree.class

    │   │   │   └── Tree2.class

    │   │   ├── Logic

    │   │   │   ├── Add_Logic.class

    │   │   │   ├── Connect_masql.class

    │   │   │   ├── Del_Logic.class

    │   │   │   ├── File_Logic.class

    │   │   │   ├── Find_Logic.class

    │   │   │   ├── Login_Logic.class

    │   │   │   ├── Out_Logic.class

    │   │   │   ├── Register_Logic.class

    │   │   │   └── Talk_Logic.class

    │   │   ├── Mysql

    │   │   │   └── Connect.class

    │   │   ├── Server

    │   │   │   ├── Logic.class

    │   │   │   ├── Main.class

    │   │   │   ├── Node.class

    │   │   │   ├── Node_Logic.class

    │   │   │   ├── Queue.class

    │   │   │   ├── Queue_Logic.class

    │   │   │   ├── Send.class

    │   │   │   ├── Server.class

    │   │   │   └── Value.class

    │   │   └── Server_sql

    │   │   ├── Main.class

    │   │   ├── Node.class

    │   │   ├── Node_sql.class

    │   │   ├── Queue.class

    │   │   ├── Queue_sql.class

    │   │   ├── Receive.class

    │   │   ├── Send_sql.class

    │   │   └── Variable.class

    │   ├── manifest

    │   └── src

    │   ├── Base

    │   │   ├── Area_Buffer.java

    │   │   ├── Packet_base.java

    │   │   ├── Register_base.java

    │   │   ├── Tree.java

    │   │   └── Tree2.java

    │   ├── Logic

    │   │   ├── Add_Logic.java

    │   │   ├── Connect_masql.java

    │   │   ├── Del_Logic.java

    │   │   ├── File_Logic.java

    │   │   ├── Find_Logic.java

    │   │   ├── Login_Logic.java

    │   │   ├── Out_Logic.java

    │   │   ├── Register_Logic.java

    │   │   └── Talk_Logic.java

    │   ├── Mysql

    │   │   └── Connect.java

    │   ├── Server

    │   │   ├── Logic.java

    │   │   ├── Main.java

    │   │   ├── Send.java

    │   │   ├── Server.java

    │   │   └── Value.java

    │   └── Server_sql

    │   ├── Main.java

    │   ├── Receive.java

    │   ├── Send_sql.java

    │   └── Variable.java

    └── QQ_sql

    ├── bin

    │   ├── Base

    │   │   ├── Area_Buffer.class

    │   │   ├── Node.class

    │   │   ├── Node1.class

    │   │   ├── Packet_base.class

    │   │   ├── Register_base.class

    │   │   ├── Tree.class

    │   │   └── Tree2.class

    │   ├── Logic

    │   │   ├── Add_Logic.class

    │   │   ├── Del_Logic.class

    │   │   ├── Find_Logic.class

    │   │   ├── Login_Logic.class

    │   │   ├── Out_Logic.class

    │   │   ├── Register_Logic.class

    │   │   └── Talk_Logic.class

    │   ├── Mysql

    │   │   └── Connect.class

    │   ├── Server

    │   │   ├── Logic.class

    │   │   ├── Main.class

    │   │   ├── Node.class

    │   │   ├── Node_Logic.class

    │   │   ├── Queue.class

    │   │   ├── Queue_Logic.class

    │   │   ├── Send.class

    │   │   ├── Server.class

    │   │   └── Value.class

    │   └── Test

    │   ├── Connect.class

    │   └── Connect_masql.class

    ├── lib

    │   └── mysql-connector-java-5.1.39-bin.jar

    ├── manifest

    └── src

    ├── Base

    │   ├── Area_Buffer.java

    │   ├── Packet_base.java

    │   ├── Register_base.java

    │   ├── Tree.java

    │   └── Tree2.java

    ├── Logic

    │   ├── Add_Logic.java

    │   ├── Del_Logic.java

    │   ├── Find_Logic.java

    │   ├── Login_Logic.java

    │   ├── Out_Logic.java

    │   ├── Register_Logic.java

    │   └── Talk_Logic.java

    ├── Mysql

    │   └── Connect.java

    ├── Server

    │   ├── Logic.java

    │   ├── Main.java

    │   ├── Send.java

    │   ├── Server.java

    │   └── Value.java

    └── Test

    ├── Connect.java

    └── Connect_masql.java

    44 directories, 194 files

    展开全文
  • 基于C/S架构的聊天系统的实现, 运用NIO机制 Socket通信,通过多线程IO操作等技术实现好友添加,删除好友,好友聊天文件功能,可用于java语言的练习与提高
  • 基于C/S架构的聊天系统的实现, 运用NIO机制 Socket通信,通过多线程IO操作等技术实现好友添加,删除好友,好友聊天文件功能,可用于java语言的练习与提高
  • 聊天传文件等等简单的功能都有 很是实用 是我们小学期做项目的作业 分享给大家~
  • JavaRMI框架实现,组合了JProgressBar,注意服务器启动用Start.jar不要用Service...,所以再接再厉发一个用RMI实现的QQ聊天室(带注册和传文件功能),谢谢大家。 希望大家多提建议和意见!让我得到提高!!谢谢!!
  • QQ聊天室(支持传文件)

    2007-12-28 13:43:27
    QQ聊天室,java实现代码,支持传文件.
  • 网络聊天系统是一款基于网络状态的在线聊天系统,其主要目的是快速便捷的实现用户之间的在线交流,由于采用C/S架构,在客户端,系统要实现下面内容: 1.当用户没有使用过该软件,请用户先注册,并将注册用户信息封装...
  • 本课题设计主要针对局域网通讯而开发设计的,采用的是C/S构架,类似飞鸽书系统,来实现聊天文件传输功能,并借助一些网络通讯组件,成功的实现了在局域网上的即时通讯。 本论文的目标是设计一个类似飞鸽传输的...
  • 服务端知识进行连接 之后调用服务端的线程 服务端并没有大的改动,在原有的基础上加上线程池, 客户端界面只有简单的一个...调用客户端的方法,方法中有线程,线程中进行socket的链接,这样才能实现多个文件的传输。
  • 毕业设计java聊天

    2012-04-12 16:09:28
    帮同学做的毕业设计-java聊天室 ...另外,里面我只了一个java mail的jar文件,还需要下载一个mysql的jdbc驱动jar。 开发采用的是netbeans 7.1,请去官网下载netbeans 7.1 for java se。only 70Mb。
  • 本系统主要分为文字聊天文件传书两大部分。所以本论文将把系统分成两大模块来介绍。 4.1 文字聊天模块的整体构架 本系统文字聊天是采用C/S结构,所以每个客户端也是作为服务器端的,当系统发送信息给局域网的用户...


    目录

    在这里插入图片描述

    一、系统设计

    本系统主要分为文字聊天和文件传书两大部分。所以本论文将把系统分成两大模块来介绍。

    4.1 文字聊天模块的整体构架
    本系统文字聊天是采用C/S结构,所以每个客户端也是作为服务器端的,当系统发送信息给局域网的用户,主要由单播模块和广播模块来实现,而其中的单播模块和用户信息模块是具有依赖性的,在接收信息的时候又有两个模块来完成,一是信息接收的模块,另一个是信息查看的模块。

    由此可以看出本模块主要分为两模块:发送模块和接收模块。发送模块:单播模块,广播模块,用户信息模块,信息记录模块接收模块:接收信息模块,查看信息模块

    综上所述,系统的架构图为:

    在这里插入图片描述
    4.2 文件传输模块的主要流程图
    由于本模块采用C/S架构故将系统运行载体分为两个部分:客户端与服务器端。文件传输需要建立有效的连接后,通过TCP/IP协议实现点对点的文件传输。通信双方是通过三次握手建立连接,实现文字、文件传输,最后关闭套节字连接。其传输的整个流程图如下:
    在这里插入图片描述

    二、系统实现

    4.3.1文字聊天的主登录界面
    由于系统的用户设计是针对的用户日常活动,而非专门从事计算机操作的人员,所以本系统力求界面友好、简单,以便给用户提供一个舒适的使用环境。在文字聊天模块的主要目标是简捷,方便。

    为了方便用户选取单个用户进行信息发送和查看在线用户的信息,所以设计了一个ListView来进行显示如图5,在ListView中包括了用户名、工作组、用户级数等。当有用户打开本系统的时候将会向局域网中的所有用户发送一个握手信息来获取网络中的在线用户信息并添加到列表中显示出来,同时也把自己的网络资源信息发送给对方,使自己被添加到其他用户的列表中。
    登录界面,如图4所示:
    在这里插入图片描述
    进行发送的,在发送时将会把信息发送给在局域网内部的所有用户包括自己。选择用户并输入发送信息,单播发送的按钮为BitBtn2,主要是通过Id UDP Server和Id UDP Client组件来编写的,由client. Send Buffer语句来发送的,主要是对局域网内部的同一工作组用户发送信息。

    广播发送的按钮为BitBtn3,主要是通过IdUDP Server和Id UDP Client组件来编写的,主要是使用了client. Broadcast来对信息,如图5所示:
    在这里插入图片描述
    其中主要的代码为:

    ```c
    void TMsgApp::InitWindow(void)
    
    {
    
          WNDCLASS      wc;
    
          HWND         hWnd;
    
          char       class_name[MAX_PATH] = IPMSG_CLASS, *tok,*msg, *p;
    
          ULONG       nicAddr = 0;
    
          int                 port_no = atoi(cmdLine);
    
          if (port_no== 0)
    
                 port_no= IPMSG_DEFAULT_PORT;
    
          if ((tok =strchr(cmdLine, '/')) && separate_token(tok, ' ', &p))
    
          {
    
                 BOOL   diag = TRUE;
    
                 DWORD      status = 0xffffffff;
    
                 if(stricmp(tok, "/NIC") == 0)//NIC           {
    
                        if(tok = separate_token(NULL, ' ', &p))
    
                               nicAddr= ResolveAddr(tok);
    
                 }
    
                 elseif (stricmp(tok, "/MSG") == 0)     
    
                 {
    
                        MsgMng      msgMng(nicAddr, port_no);
    
                        ULONGcommand =IPMSG_SENDMSG|IPMSG_NOADDLISTOPT|IPMSG_NOLOGOPT, destAddr;
    
                        while((tok = separate_token(NULL, ' ', &p)) != NULL && *tok == '/') {
    
                               if(stricmp(tok, "/LOG") == 0)
    
                                      command&= ~IPMSG_NOLOGOPT;
    
                               elseif (stricmp(tok, "/SEAL") == 0)
    
                                      command= IPMSG_SECRETOPT;
    
                        }
    
                        if((msg = separate_token(NULL, 0, &p)) != NULL)
    
                        {
    
                               diag= FALSE;
    
                                if ((destAddr = ResolveAddr(tok)) != NULL)
    
                                      status= msgMng.Send(destAddr, htons(port_no), command, msg) ? 0 : -1;
    
                        }
    
                 }
    
                 if(nicAddr == 0)
    
                 {
    
                        if(diag)
    
                               MessageBox(0,"ipmsg.exe [portno] [/MSG [/LOG] [/SEAL] <hostname or IP addr><message>]\r\nipmsg.exe [portno] [/NIC nic_addr]", MSG_STR, MB_OK);
    
                        ::ExitProcess(status);
    
                        return;
    
                 }
    
          }
    

    源文件

    在这里插入图片描述

    展开全文
  • 【实例简介】使用java实现的简单版飞鸽书,可以单聊、群聊、发送文件,使用UPD获取在线用户及聊天,使用TCP发送文件。代码比较简洁,界面工整,学习使用。【实例截图】【核心代码】simple_ipmsg└── simple_...
  • 论述在CöS 体系结构下, 设计一种局域网文件传送的工具软件“飞鸽书”。功能包括局 域网文件传送和局域网聊天, 可同时对多用户发送多个文件; 同时新增了传送文件功能不分目 录与文件, 统一传送, 让用户使用起来更...
  • 客户端通过下载的Java Applet 小程序和服务器建立套接字连接字后,用户输入聊天的昵称就可以和其他用户聊天; 2. 聊天室界面包括公共聊天信息和私人聊天信息,用户可以用鼠标双击聊天列表中某个聊天者的昵称,和该...
  • 客户端可以实现注册,即时聊天,相互之间收发文件,发送截图,查看历史聊天记录等功能。收发消息时,可以实现离线接收。 服务器端应当建立一个ServerSocket,并且不断进行侦听是否有客户端连接或者断开连接(包括判断...
  • Java聊天室,Swing项目,练习项目,仅供参考,实现了修改字体,发送表情,窗口振动,传文件等功能,自认为对得起这分数
  • 自已写的一个java聊天 室,实现的功能有 群聊,私聊,可以传文件,改变字体 ,截图。 是初学java聊天室的模板,内容简单易懂, 功能全面。。。童叟无欺。
  • java简单版飞鸽

    热门讨论 2014-06-14 13:16:28
    使用java实现的简单版飞鸽书,可以单聊、群聊、发送文件,使用UPD获取在线用户及聊天,使用TCP发送文件。代码比较简洁,界面工整,学习使用。
  • 实现了群发、私发、点对点文件功能。 客户端自建了一个类继承了Cmd模块,使用自定义的命令command进行操作,调用相应的do_command方法。 使用json模块进行消息的封装序列化,在接收方进行解析。 客户端代码如下...
  • java 多线程聊天系统

    2009-04-13 12:46:11
    QQ界面的聊天系统,服务器端用多线程实现了公共聊天和私人聊天,还可以传送简单的文本文档 说明: 主程序:SFace.java和Face.java 服务器端操作说明: 1、输入本地IP和聊天通信的端口,然后建立服务器; 2、消息...
  • java socket文件传输

    2014-07-16 11:24:48
    不久前实现java的多人聊天室,通过多线程实现了多个客户端之间互相收发其他人的消息。 而文件的传输的原理大体上与聊天的原理差不多,通过socket建立客户端与服务器端的连接,客户端可以发送请求,服务器端处理...
  • 本文实例为大家分享了python实现简单聊天室的具体代码,供大家参考,具体内容如下刚刚接触python编程,又从接触java开始一直对socket模块感兴趣,所以就做了一个聊天室的小程序。该程序由客户端与服务器构成,使用...

空空如也

空空如也

1 2 3 4 5
收藏数 91
精华内容 36
关键字:

java实现聊天传文件

java 订阅