聊天版本一

//udp_client.h
#include<iostream>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdio.h>
#include<string.h>
#include<string>
#include<stdlib.h>
#include"comm.h"
#define _IP_ "127.0.0.1"
#define _PORT_ 8080
class udp_client
{
    public:
        udp_client(string _ip=_IP_,short _port=_PORT_);
        void init();
        int send_data(string& _in);
        int recv_data(string& _out);
        ~udp_client();
    private:
        string ip;
        short port;
        int sock;
};
//udp_client.cpp
#include"udp_client.h"
udp_client::udp_client(string _ip,short _port)
:ip(_ip)
,port(_port)
,sock(-1)
{}
void udp_client::init()
{
    sock=socket(AF_INET,SOCK_DGRAM,0);
    if(sock<0)
    {
        print_log(strerror(errno),__FUNCTION__,__LINE__);
        exit(1);
    }
}
int udp_client::send_data(string& _in)
{
    struct sockaddr_in client;
    client.sin_family=AF_INET;
    client.sin_port=htons(port);
    client.sin_addr.s_addr=inet_addr(ip.c_str());
    socklen_t len=sizeof(client);
    ssize_t _s=sendto(sock,_in.c_str(),_in.size(),0,(struct sockaddr*)&client,len);
    if(_s<0)
    {
        print_log(strerror(errno),__FUNCTION__,__LINE__);
    }
    return _s;
}
int udp_client::recv_data(string& _out)
{
    struct sockaddr_in remote;
    socklen_t len=sizeof(remote);
    char buf[_SIZE_];
    ssize_t _s=recvfrom(sock,buf,sizeof(buf)-1,0,(struct sockaddr*)&remote,&len);
    if(_s>0)
    {
        buf[_s]=‘\0‘;
        _out=buf;
    }
    else 
    {
        print_log(strerror(errno),__FUNCTION__,__LINE__);
    }
    return _s;
}
udp_client::~udp_client()
{
    if(sock>0)
    {
        close(sock);
    }
}
//main_client.cpp
#include"udp_client.h"
int main()
{
    string str="helloworld";
    udp_client _cl;
    _cl.init();
    _cl.send_data(str);
    _cl.recv_data(str);
    cout<<"server: "<<str<<endl;
}
//udp_server.h
#include<iostream>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdio.h>
#include<string.h>
#include<string>
#include<stdlib.h>
#include"comm.h"
#define _DEFAULT_IP_  "127.0.0.1"
#define _DEFAULT_PORT_ 8080
class udp_server
{
    public:
        udp_server(string _ip=_DEFAULT_IP_,short _port=_DEFAULT_PORT_);
        void init();
        int send_data(string& _in,struct sockaddr_in& r);
        int recv_data(string& _out,struct sockaddr_in& r);
        int broadcast();
        ~udp_server();
    private:
        string ip;
        short port;
        int sock;
};
//udp_server.cpp
#include"udp_server.h"
udp_server::udp_server(string _ip,short _port)
:ip(_ip)
,port(_port)
,sock(-1)
{}
void udp_server::init()
{
    sock=socket(AF_INET,SOCK_DGRAM,0);
    if(sock<0)
    {
        print_log(strerror(errno),__FUNCTION__,__LINE__);
        exit(1);
    }

    struct sockaddr_in local;
    local.sin_family=AF_INET;
    local.sin_port=htons(port);
    if(ip=="any")
        local.sin_addr.s_addr=htonl(INADDR_ANY);
    else
        local.sin_addr.s_addr=inet_addr(ip.c_str());
    if(bind(sock,(struct sockaddr*)&local,sizeof(local))<0)
    {
        print_log(strerror(errno),__FUNCTION__,__LINE__);
        exit(2);
    }
}
int udp_server::send_data(string& _in,struct sockaddr_in& r)
{

    struct sockaddr_in client;
    client=r;
    socklen_t len=sizeof(client);
    ssize_t _s=sendto(sock,_in.c_str(),_in.size(),0,(struct sockaddr*)&client,len);
    if(_s<0)
    {
        print_log(strerror(errno),__FUNCTION__,__LINE__);
    }
    cout<<"send"<<_in<<endl;
    return _s;
}
int udp_server::recv_data(string& _out,struct sockaddr_in& r)
{
    struct sockaddr_in remote;
    socklen_t len=sizeof(remote);
    char buf[_SIZE_];
    ssize_t _s=recvfrom(sock,buf,sizeof(buf)-1,0,(struct sockaddr*)&remote,&len);
    if(_s>0)
    {
        buf[_s]=‘\0‘;
        cout<<"client: "<<buf<<endl;
        _out=buf;
    }
    else if(_s==0)
    {
        print_log("client is close",__FUNCTION__,__LINE__);
    }
    else 
    {
        print_log(strerror(errno),__FUNCTION__,__LINE__);
    }
    r=remote;
    return _s;
}
int udp_server::broadcast()
{
    return 0;    
}
udp_server::~udp_server()
{
    if(sock>0)
    {
        close(sock);
    }
}
//main_server.cpp
#include"udp_server.h"
int main()
{
    udp_server _se;
    _se.init();
    string out;
    struct sockaddr_in r;
    _se.recv_data(out,r);
    _se.send_data(out,r);
    cout<<inet_ntoa(r.sin_addr)<<r.sin_port<<endl;
    return 0;
}
时间: 2024-10-12 21:10:44

聊天版本一的相关文章

Unity3D 实现简单的语音聊天 [Android版本]

上次简单说了iOS版本的聊天功能 Unity3D 实现简单的语音聊天 [iOS版本] 这次我们接着上篇来说下Android版本来实现简单的语音聊天,流程和iOS基一样的 @[email protected] 在这里我们可能会遇到一下问题: 1.U3D C# 与 Android Java之间是怎么通讯 2.Android怎么调用原生的录音功能和播放功能 好,我们逐一解决问题 1.U3D C# 与 Android Java之间是怎么通讯 相比iOS,Android这边会比较简单些 再C# 中这样调用

软件工程腾讯QQ (1)优点:聊天功能比较强大。同时提供安全登陆通道,保障了用户信息的安全性。应用的人群范围比较广 缺点:要展示的信息量太多,用户个人信息容易泄露。有一些弄虚作假通过其欺骗用户上当。 (2)有使用需要自己下载 (3)版本更新修复bug,定期更新版本

1.软件工程未来的发展方向是什么? 2.编程基础不好,我能学习好软件工程吗? 3.软件工程跟物联网之间的区别与联系是什么? 4.软件工程在现实生活中有哪些应用? 5.在软件工程的分类中,如何选择一个适合自己的? 6.软件工程的学习中最难克服的阶段是什么? 7.怎样学好软件工程? 腾讯QQ (1)优点:聊天功能比较强大.同时提供安全登陆通道,保障了用户信息的安全性.应用的人群范围比较广 缺点:要展示的信息量太多,用户个人信息容易泄露.有一些弄虚作假通过其欺骗用户上当. (2)有使用需要自己下载 (

java socket控制台版本聊天室程序源码下载

原文:java socket控制台版本聊天室程序源码下载 代码下载地址:http://www.zuidaima.com/share/1550463257578496.htm java socket控制台版本聊天室程序源码下载,学习的时候写的,适合学习java基础 java网络编程基础用 标签: java socket 控制台 聊天室 源码话题: 网络编程 java socket控制台版本聊天室程序源码下载,布布扣,bubuko.com

Unity3D 实现简单的语音聊天 [iOS版本]

现在很多手机游戏中的聊天系统都加入语音聊天的功能,相比于传统的文字聊天,语音聊天在MMORPG中显得尤为重要,毕竟直接口头交流总比你码字快得多了,也更直观些. 实现语音聊天的方法很多,U3D中有不少第三方的插件,提供了很多功能强大的语音功能,具体有哪些我就不一一举例了(其实我都没用过- -!),本文想从一个原生开发的角度去实现一个简单的语音聊天功能. 语音聊天大概流程如图: 上图中可以看到,客户端录制语音数据,并进行编码转换,数据压缩,然后把语音数据发送到语音服务器,语音服务器进行派发功能(语音

RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增企业通(内部简易聊天工具)

RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本 新增企业通(内部简易聊天工具) RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案. "企业通"是RDIFramework.NET框架提供的一个即时通讯.内部聊天沟通的工具.虽不能与商业化专业的沟通工具相比,但对于框架内部进行消息的沟通还是比较方便的.成功登录框架后,点击框架主菜单"辅助工具"→"企业通&

中国寒龙反网络病毒联盟官方荣誉出品 -对接 国外在线 聊天室 畅聊版本 对接全世界网络摄像头 随时随地聊不停,今天写的是教程欢迎访问!

教程请往下面看 上面是 聊天截图  嗯 主站聊天对接网进入口是:www.hackerschina.org大家好,我是寒龙很高兴与大家 共享本站平台  本站平台基于 世界版本在线聊天 !首先看教程!教程如下操作说明!首先点击:www.hackerschina.org 网站  然后点击[寒龙国际聊天]这个按钮!如图所示: 接下来等待几秒会进入对接页面:CR  我们 要点击  Start (F2) 这个按钮   这个按钮 点开以后 会看到  这个对话框Authorization Username是用户

【开源下载】c#编写的聊天程序微风IM 版本2 增加局域网P2P通信

新年第一天 恭祝大家新年快乐 一直有朋友问P2P相关的问题,最近有时间在微风IM的基础上,实现了P2P通信,共享给大家,希望大家批评指正. 源码下载 (只包含源码,无插入式广告:)  数据库下载   数据库与第一版相同没有变化 我们知道在网络通信中,如果所有的通信都通过服务器转发,会增加服务器的负担,如果实现了P2P,客户端之间直接通讯,比如聊天或者传送文件时不再通过服务器,而是客户端之间直接通信,将会有效的减轻服务器的负担,提高程序的效率. 本节相关的P2P,指的是通过TCP协议,在局域网中实

一款ios版本的IM聊天应用项目源码

这个是IM聊天应用源码,该应用IM支持实现XMPP,以及图片和表情,语音,消息回执等功能,基本覆盖了常见的im应用的功能了,大家可以参考一下吧. 源码下载: 本帖隐藏的内容 http://code.662p.com/view/7302.html 详细说明:http://ios.662p.com/thread-1889-1-1.html

免费美女视频聊天,多人视频会议功能加强版本(Fms3和Flex开发(附源码))

Flex,Fms3系列文章导航 Flex,Fms3相关文章索引 本篇是视频聊天,会议开发实例系列文章的第4篇,该系列所有文章链接如下: http://www.cnblogs.com/aierong/archive/2008/12/30/Flex.html#sp 本软件只是一个简单的应用,主要是为了总结一下学习思路和开发方向,和大家交流.本软件实现的功能也比较简单,主要是视频,在线聊天,用户列表等等.代码可能写得比较乱,功能还不完善计划下步做以下事情的开发:一对一聊天,包括私聊聊天记录的保存和查询