网站模板库
  • 首页
  • web前端工具
    • HTML/JS转换工具
    • JS/HTML格式化工具
    • 字母/英文大小写转换工具
    • robots.txt文件生成工具
    • Js压缩/格式化工具
    • Css在线压缩工具_代码格式化
  • 关于我们
    • 免责声明
    • 联系我们
    • 广告服务
    • 服务项目
    • 关于我们
    • 网站轮播
    • 公告
    • 成都优优科技专用
    • 按行业分类
  • web学院
    • 服务器教程
    • 学习资料
      • 基础书籍
      • 交互书籍
      • 入门教程
      • 特效分类
    • 案例分享
    • web资讯
  • 网页特效
    • 图片特效
    • 导航特效
    • 滑动按钮
    • 表单特效
    • 文字特效
    • 弹窗特效
    • 其他特效
  • 织梦模板
    • 科技/电子/数码/通信
    • 文化/艺术/广告/传媒
    • 装修/设计/家居/家具
    • 基建/施工/地产/物业
    • 餐饮/酒店/旅游/票务
    • 食品/果蔬/饮料/日用
    • 服饰/珠宝/礼品/玩具
    • 摄影/婚庆/家政/生活
    • 运动/健身/体育/器材
    • 学校/教育/培训/科研
    • 美容/保健/医院/医疗
    • 金融/财税/咨询/法律
    • 政府/组织/集团/协会
    • 汽车/物流/交通/搬运
    • 机械/设备/制造/仪器
    • 化工/环保/能源/材料
    • 农业/畜牧/养殖/宠物
    • 其他模版
    • IT/软件/信息/互联网
  • 手机模板
    • 手机APP模板
    • 微信小程序模板
    • wap
  • 网站模板
    • joomla模板
    • Drupal模板
    • z-blog模板
    • EyouCms模板
    • Bootstrap模板
    • 帝国cms模板
    • CmsEasy模板
    • MetInfo模板
    • 购物商城模板
      • Shopify主题
      • PrestaShop主题
    • 后台模板
    • 纯HTML模板
    • ecshop模板
    • phpwind模板
    • pbootcms模板
    • phpcms模板
    • wordpress模板
    • discuz模板
  • 教程
    • 织梦教程
    • Discuz教程
    • WordPress教程
    • Phpcms教程
    • Phpwind教程
    • ECShop教程
    • Joomla教程
    • Drupal教程
    • zblog教程
    • EyouCMS教程
    • 帝国cms教程
    • MetInfo教程
    • CmsEasy教程
登录
当前位置:网站模板库 > web学院 > 服务器教程 > 我想问下如何在手机上建立一个服务器,用Socket的方法如何实现。
商业源码 服务器教程 2024-01-18 11:49:02

我想问下如何在手机上建立一个服务器,用Socket的方法如何实现。

我想问下如何在手机上建立一个服务器,用Socket的方法如何实现。,第1张

TCP方式:

TCP协议客户端实现:

//创建一个Socket对象,指定服务器端的IP地址和端口号

Socketsocket=newSocket("1921681104",4567);

//使用InputStream读取硬盘上的文件,这里只是用文件当做信息源,可以读取控件用户输入信息

InputStreaminputStream=new

FileInputStream("f://file/wordstxt");

//从Socket当中得到OutputStream

OutputStream outputStream=socketgetOutputStream();

bytebuffer[]=newbyte[41024];inttemp=0;

//将InputStream当中的数据取出,并写入到OutputStream当中

while((temp=inputStreamread(buffer))!=-1)

5

{

outputStreamwrite(buffer,0,temp);}

outputStreamflush();}

TCP协议服务器端实现:

//声明一个ServerSocket对象

ServerSocketserverSocket=null;

try{

//创建一个ServerSocket对象,并让这个Socket在4567端口监听

serverSocket=newServerSocket(4567);

//调用ServerSocket的accept()方法,接受客户端所发送的请求,

//如果客户端没有发送数据,那么该线程就停滞不继续

Socketsocket=serverSocketaccept();

//从Socket当中得到InputStream对象

InputStreaminputStream=socketgetInputStream();

bytebuffer[]=newbyte[10244];

inttemp=0;

//从InputStream当中读取客户端所发送的数据

while((temp=inputStreamread(buffer))!=-1)

{

Systemoutprintln(newString(buffer,0,temp));}

}

catch(IOExceptione)

{

eprintStackTrace();}

serverSocketclose();

}

UDP方式

UDP的客户端代码实现如下:

public static void main(String[]args)

{

try{

//首先创建一个DatagramSocket对象

DatagramSocket socket=new DatagramSocket(4567);

//创建一个InetAddree

6

InetAddress serverAddress=InetAddressgetByName("1921681104");

String str="hello";

//这是要传输的数据

byte data[]=strgetBytes();

//把传输内容分解成字节

//创建一个DatagramPacket对象,并指定要讲这个数据包发送到网

络当中的哪个地址,以及端口号

DatagramPacket packet=new

DatagramPacket(data,datalength,serverAddress,4567);

//调用socket对象的send方法,发送数据

socketsend(packet);}

catch(Exceptione)

{

eprintStackTrace();}

}

UDP的服务端代码实现如下:

//创建一个DatagramSocket对象,并指定监听的端口号

DatagramSocket socket=new DatagramSocket(4567);

bytedata[]=newbyte[1024];

//创建一个空的DatagramPacket对象

DatagramPacket packet=new DatagramPacket(data,datalength);

//使用receive方法接收客户端所发送的数据,

//如果客户端没有发送数据,该进程就停滞在这里

socketreceive(packet);

Stringresult=newString(packetgetData(),packetgetOffset(),

packetgetLength());

Systemoutprintln("result--->"+result);

一般socket链接有以下两种方式:长(常)链接和短链接。

长链接:当数据发送完成后socket链接不断开。一直保留到异常或者是程序退出为止 ,这种方式的好处是不用每次去发起连接断开,在速度上可以比短连接要快一些,但是相 对来说对服务器的资源压力也要大些。长链接用的范围很广,比如游戏系统,qq等等,长 (常)链接一般还需要定时向服务器ping数据,以保证socket链接畅通。当ping不通服务 器时,需要重新开启链接。

短链接:当一次数据发送完毕后,主动断开链接,每次发送数据都要一次链接、断开 操作,这种方式的好处是:对服务器的资源占用相对来说比较小,但是由于每次都要重新 链接,速度开销上也比较大,这种方式对于那种不需要经常与服务器交互的情况下比较适 用。

上面两种方法在用户量非常大的情况下都存在着很大的不足,因此,考虑可以用 一种折衷的办法,那就是使用socket的连接池。

程序一开始初始化创建若干数量的长链接。给他们设置一个标识位,这个标识位表示 该链接是否空闲的状态。当需要发送数据的时候,系统给它分配一个当前空闲的链接。同 时,将得到的链接设置为“忙”,当数据发送完毕后,把链接标识位设置为 “闲”,让系统可以分配给下个用户,这样使得两种方式的优点都充分的发挥 出来了。用户数量足够多的时候,只需要动态增加链接池的数量即可。

下面我们用具体的程序来讲解下:

首先声明一个socket类:

public class XieGouSocket

{

public Socket m_socket; //Socket对象

public bool m_isFree; //判断是否空闲

public int m_index; //在链接缓存池中的索引值

}

下面的函数是创建socket链接池,这里为了使代码更加清晰,特地把异常处理部分 全部取掉了。

public XieGouSocket[] m_socket; //先定义个缓冲池

public void CreateSocketPool()

{

string ip= “127001”;

string port= 2003;

IPAddress serverIp=IPAddressParse(ip);

int serverPort=ConvertToInt32(port);

IPEndPoint iep=new IPEndPoint(serverIp,serverPort);

m_socket = new XieGouSocket[200];

for(int i =0; i < 200 ; i ++)

{

m_socket[i] = new XieGouSocket();

m_socket[i]m_index = i ;

m_socket[i]m_isFree = true;

m_socket[i]m_socket =new Socket (AddressFamilyInterNetwork,SocketTypeStream,ProtocolTypeTcp);

m_socket[i]m_socketSetSocketOption (SocketOptionLevelSocket,SocketOptionNameSendTimeout,1000);

m_socket[i]m_socketConnect(iep);

}

}

下面的函数是获取当前空闲的socket链接:

因为是多线程,所以需要加一个原子操作,定义一个原子变量,以防止多个线程 之间抢占资源问题的发生。

private static Mutex m_mutex=new Mutex();

public static XieGouSocket GetFreeConnection()

{

m_mutexWaitOne(); //先阻塞

for(int i =0; i < m_socketLength ; i ++)

{

if(m_socket[i]m_isFree) //如果找到一个空闲的

{

m_socket[i]m_isFree = false;

m_mutexReleaseMutex();//释放资源

return m_socket[i];

}

}

//如果没有空闲的链接,要么等待,要么程序再动态创建一个链接。

m_mutexReleaseMutex();//释放资源

return null;

}

当数据发送完毕后,程序必须将m_isFree 设置为 False。否则只使用不释放,程序很 快就溢出了。

hi,帅哥。我无法清晰的理解你的问题。为了便于理解,我们先把一个应用分一下层次,然后再讨论一下你需要在哪个层次上工作。首先,针对你提到的应用我们可以分成“协议层”,“中间层”,“业务层”“协议层”是指实现The WebSocket Protocol(RFC6455)的代码部分。其中Client端规范已经有支持WebSocket的浏览器实现了,估计不需要自己做client端吧。而Server端规范也有一些第三方的实现,例如:Kaazing,Netty。如果你没有也不想使用第三方提供的Server那么就需要自己写一个了。\"中间层\"是指基于协议层之上的辅助实现应用逻辑的框架。好像Netty就包含这样的框架。当然如果你不需要也可以直接忽略。\"业务层\"是指具体实现业务需求的代码部分,例如你提到的“登录”。那么现在请问你需要的是仅仅实现\"业务层\"的登录逻辑?还是服务端的协议?看到你已经有一个服务器,那么上面是否已经有了完整可用的服务器端代码?是否只需要实现客户端逻辑就可以了呢?

过程大概是KGSocketClient/KGSocketServe 创建了KGNetSession 会话管理进行发送/接收数据的监听会进行一次开启事件 OnStartRecive() 函数回调, 监听到的数据包KGNetPacket 通过KGPackExtension 转化成KGNetData自已定义的数据结构类,然后在KGNetSession里面的 OnReciveData(T) 函数 进行回调

这个好像没啥好说的=。= 自定义的数据类都要继承他

[上传失败(image-3c0ba8-1564388496437)]

因为每条消息包 你不知道他的长度 所以要在前面利用BitConverterGetBytes获取一个包的长度Int值

这个int就站byte[]四个长度 所以HeadLength=4,然后获取到长度了在SetPackLen给PacketBuff赋值上获取到的长度

所有打印都是通过KLog()进行打印的 在别的地方可以在LogEvent就可以获取到打印事件了

链接 数据 创建一个 对象 客户端
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 我想问下如何在手机上建立一个服务器,用Socket的方法如何实现。

商业源码 钻石

分享到:
上一篇
马桶csteam名叫什么
下一篇
云服务器用windows还是linux系统比较好?

相关推荐

IBM服务器更换硬盘

IBM服务器更换硬盘

用友T3标准版 客户端无法登陆

用友T3标准版 客户端无法登陆

如何将Windows服务器变成iSCSI存储服务器

如何将Windows服务器变成iSCSI存储服务器

我的世界怎么创建服务器 创建服务器具体教程

我的世界怎么创建服务器 创建服务器具体教程

0条评论

发表评论 取消回复

要发表评论,您必须先登录。

提供最优质的资源集合

立即查看 了解详情
网站模板库

主题/付费下载/查看/余额管理/自定义积分,集成支付,卡密,推广奖励等。

本站导航
  • 链接标题
友情链接
  • 链接标题
快速搜索
本站由钛宇宙强力驱动
友情链接:
    商业源码网蜀ICP备2023005044号
    网站模板库
    • 登录
    • 注册
    网站模板库
    • 首页
    • web前端工具►
      • HTML/JS转换工具
      • JS/HTML格式化工具
      • 字母/英文大小写转换工具
      • robots.txt文件生成工具
      • Js压缩/格式化工具
      • Css在线压缩工具_代码格式化
    • 关于我们►
      • 免责声明
      • 联系我们
      • 广告服务
      • 服务项目
      • 关于我们
      • 网站轮播
      • 公告
      • 成都优优科技专用
      • 按行业分类
    • web学院►
      • 服务器教程
      • 学习资料►
        • 基础书籍
        • 交互书籍
        • 入门教程
        • 特效分类
      • 案例分享
      • web资讯
    • 网页特效►
      • 图片特效
      • 导航特效
      • 滑动按钮
      • 表单特效
      • 文字特效
      • 弹窗特效
      • 其他特效
    • 织梦模板►
      • 科技/电子/数码/通信
      • 文化/艺术/广告/传媒
      • 装修/设计/家居/家具
      • 基建/施工/地产/物业
      • 餐饮/酒店/旅游/票务
      • 食品/果蔬/饮料/日用
      • 服饰/珠宝/礼品/玩具
      • 摄影/婚庆/家政/生活
      • 运动/健身/体育/器材
      • 学校/教育/培训/科研
      • 美容/保健/医院/医疗
      • 金融/财税/咨询/法律
      • 政府/组织/集团/协会
      • 汽车/物流/交通/搬运
      • 机械/设备/制造/仪器
      • 化工/环保/能源/材料
      • 农业/畜牧/养殖/宠物
      • 其他模版
      • IT/软件/信息/互联网
    • 手机模板►
      • 手机APP模板
      • 微信小程序模板
      • wap
    • 网站模板►
      • joomla模板
      • Drupal模板
      • z-blog模板
      • EyouCms模板
      • Bootstrap模板
      • 帝国cms模板
      • CmsEasy模板
      • MetInfo模板
      • 购物商城模板►
        • Shopify主题
        • PrestaShop主题
      • 后台模板
      • 纯HTML模板
      • ecshop模板
      • phpwind模板
      • pbootcms模板
      • phpcms模板
      • wordpress模板
      • discuz模板
    • 教程►
      • 织梦教程
      • Discuz教程
      • WordPress教程
      • Phpcms教程
      • Phpwind教程
      • ECShop教程
      • Joomla教程
      • Drupal教程
      • zblog教程
      • EyouCMS教程
      • 帝国cms教程
      • MetInfo教程
      • CmsEasy教程

      弹窗标题

      这是一条网站公告,可在后台开启或关闭,可自定义背景颜色,标题,内容,用户首次打开关闭后不再重复弹出,此处可使用html标签...