TCP 服务器端口问题???

pku2009 2008-08-19 07:24:35

小弟在做考勤程序。用TCP协议

基本需求:

每天员工通过客户端连接服务器请求上班,服务器接到请求后读取数据库,如果有这个员工就回复允许其上班,
并记录他的上班时间到数据库。下班类似。


现在想问下,服务器要在一个端口上监听吗?现在公司有40多个人。好像不可以吧?

那服务器这方面要采用什么模型啊?

之前是用UDP做的,发现有丢包现象。当时服务器建立一个套接字绑定到一个端口上,然后开了一个线程不停的接收。

那TCP该怎么实现啊?大家有什么建议吗?有好的例子也可以把地址发上来哦。

在线等啊!! 谢谢
我对网络实在是不熟悉的
...全文
87 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cricketol 2008-08-20
  • 打赏
  • 举报
回复
accept_sock = accept(listen_sock,(sockaddr *)&acp_addr,&len);
你看这句,监听用的是listen_sock,当有客户连接时就交给accept_sock,然后listen_sock继续监听,你可以每次都创建新的socket来accept新的连接
所以只需要监听一个端口
cnzdgs 2008-08-19
  • 打赏
  • 举报
回复
TCP通常就是用一个端口监听的,收到连接请求后执行accept,accept会自动创建一个新的套接字绑定一个未使用的端口来与对方建立连接。40个客户端同时连接就需要40个套接字和端口(不计监听的端口)。另外,网络程序中经常会遇到失败的情况,要取错误码判断失败原因,根据需要延时重试。
lllxy 2008-08-19
  • 打赏
  • 举报
回复
服务器端对每个客户端会有一个套接字,也就是socket对象 与客户端进行通讯,但端口只有一个。
pku2009 2008-08-19
  • 打赏
  • 举报
回复
谢谢大家啊,

现在想知道如果很多人同时登录,那会有什么问题吗?需要很多套接字以及端口吗?
Cricketol 2008-08-19
  • 打赏
  • 举报
回复

WSAData wsad;
WSAStartup(MAKEWORD(2,2),&wsad);
SOCKET listen_sock= socket(AF_INET,SOCK_STREAM,0);
SOCKET accept_sock= socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN ser_addr,acp_addr;
ser_addr.sin_family = AF_INET;
ser_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
ser_addr.sin_port = htons(8080);
bind(server_sock,(sockaddr*)&ser_addr,sizeof(ser_addr));
listen(server_sock,100);
int len = sizeof(SOCKADDR_IN);
while(1)
{
listen_sock = socket(AF_INET,SOCK_STREAM,0);
accept_sock = accept(listen_sock,(sockaddr *)&acp_addr,&len);//在这里阻塞,默认方式是阻塞,当然也可以改
CreateThread(0,0,(LPTHREAD_START_ROUTINE)SubThread,(LPVOID)&accept_sock,0,0);//启动新线程接收,并且传入套接字
}
WSACleanup();


linglongyouzhi 2008-08-19
  • 打赏
  • 举报
回复
tcp就是开一个线程监听,收到连接请求就新建一个线程进行会话,记录上班请求,会话完毕后把线程关闭就可以了
每个员工请求上班的过程都如此操作
bxx5203344 2008-08-19
  • 打赏
  • 举报
回复
菜鸟飘过!
顶一顶!

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧