马上加入TC
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 剑仙十号 于 2021-5-22 15:23 编辑
【即时通讯软件】网络类。2编写服务器
启动按钮 停止按钮
网络绑定(服务端套接字,9998)//绑定目标端口,并开启这个端口。
网络监*(服务器套接字, 8)
//把端口分成N个插孔,并监*插孔中_所有来自客户端的消息。
服务器有个命令:网络接受()
它跟客户端命令:网络连接() 必须配对使用。客户端是攻,服务器是受。
通用命令:网络接受() 和 网络接收(),必须放到循环中 才能连续收发消息。
但 网络接受() 会挂起并等待,一直到客户端有 网络连接()的到来。
这样不适合跟 网络接收() 网络发送() 放在同一个循环,在循环中收发消息。
所以设置一个循环,用来循环 网络接受()命令,接受多个客户端的 网络连接()。
再用 线程开启("收发循环", ""),开辟一个新线程。里面再设置一个循环,用来循环收发所有客户端的消息。
一直到这里,我们的服务器才算启动成功。
//伪代码. 不是项目代码.
var 客户端句柄s=数组()
var 客户端个数
功能 收发循环()
var 消息
while(1)
for(var i=0;i<客户端个数;i++)
if(客户端句柄s>0)
网络接收(客户端句柄s)
if(消息 != "") //消息不为空.
//判断客户端个数,再新开多个线程,用for循环发送消息。例如30个客户端,就开辟3个线程;60个客户端,就开辟6个线程;100个客户端,就开辟10个线程。
网络发送(客户端句柄s)
end
sleep(20)
end
end//for.
sleep(100)
end//while.
结束
功能 发送消息_按钮()
var text=编辑框获取文本("编辑框0")
if(text != "")
var 状态=复选框获取状态("复选框0")
if(状态 == 真)
//单f消息
编辑框设置文本("编辑框0", "") //清空.
elseif(状态 == 假)
//群f消息
编辑框设置文本("编辑框0", "") //清空.
end
end
结束
|