服务器系统有哪些端并发通信有哪些方法

基于通信接口封装机制的网络并发服务器设计—word doc
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
基于通信接口封装机制的网络并发服务器设计
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口注册时间 11:00:34
最后登录 11:42:23
用户头衔:注册会员
状态:我不在线
我写好了一个client 在arm9上跑,同事写了个server在win2000上跑,client往server发数据,服务端程序是阻塞式多线程实现,问题是:通信过程中,client会不明原因地自动结束(不明原因是只没任何提示),有的时候又可以看到如:connection refused和 connection reset by peer.初步原因经查证为:
1,tcp 端口连接数逻辑上为256个,但是因为服务线程处理数据费时,速度比client连接慢,没及时断开连接.
2,服务器套接口维护的连接队列长度不能满足需求
我现在还迷惑的是:
1;即使服务器重置连接或拒绝连接,client也不应该会结束,因为我的client在连接传输过程中的每一步失败后都是continue,继续尝试.
2;服务端拒绝连接和重置连接这种情况有什么好的解决方法啊,不可能每次都要重启client吧,我增设了服务端tcp端口连接上限效果也一样.
3;服务器套接口的连接队列大小该怎么设置,服务器程序是用c++写的,在c中是改变listen()函数的第二个参数设置,c++中同事不清楚怎么改
注册时间 20:23:34
最后登录 20:26:06
用户头衔:注册会员
状态:我不在线
1. 是不是遇到出错或者被中断后,服务器端采取close了socket导致的?2. 采用循环,while(1)3. 不知道, C++中不是调用listen()么, 应该也有BACKLOG这个参数吧.
注册时间 11:00:34
最后登录 11:42:23
用户头衔:注册会员
状态:我不在线
1,服务端应该是生成的新线程处理完数据就close socket.
2,我是采用的循环,while(1),所以有那样的疑问,不管怎么样它都应该跳不出循环
3,c++中的listen()就这样的,不带参数
刚才同事自己用c++写了个客户端,往server上发数据,他说都没问题,郁闷啊!
注册时间 23:33:02
最后登录 16:41:12
用户头衔:注册会员
状态:我不在线
客户端socket初始化和发送部分代码贴出来瞧瞧
-..- .---- .----
注册时间 11:00:34
最后登录 11:42:23
用户头衔:注册会员
状态:我不在线
client socket 核心代码如下:(代码在虚拟机上,好象不能直接拷贝出来)
int upload(){
1//文件标识符
2 size_//读取长度
3//结构,用来取得文件大小
unsigned char buf[1024+1];//缓冲区
struct sockaddr_
//初始化套接口,hostname和port是经过参数初始化了的服务器ip和端口
servaddr.sin_family=AF_INET:
servaddr.sin_port=htons(port);
if(inet_pton(AF_INET,hostname,&servaddr.sin_addr)&=0){
perror("inet_pton");
stat(filename,&buffer);//取得文件属性
//打开文件
if((f=open("filename",O_RDONLY))&0){
perror("can't open file");
//生成套接口
if(sockfd=socket(AF_INET,SOCK_STREAM,0)&0){
perror("socket");
//连接服务器
if(connect(sockfd,(struct sockaddr *)&seraddr,sizeof(struct sockaddr))&0){
perror("connect");
close(sockfd);
resize=buffer.st_//文件大小
while(rsize&0){
resize -=readn(f,buf,1024);//readn()函数是经过封装了read函数能准确读一定字节文件的函数
writen(sockfd,buf,1024);//和readn函数一样封装过write函数
close(sockfd);
无语问苍天
注册时间 20:23:34
最后登录 20:26:06
用户头衔:注册会员
状态:我不在线
给代码加上标签吧, 这样看起来清晰
注册时间 11:00:34
最后登录 11:42:23
用户头衔:注册会员
状态:我不在线
客户端会关闭这点最让我头疼,始终弄不明白
无语问苍天
注册时间 23:33:02
最后登录 16:41:12
用户头衔:注册会员
状态:我不在线
贴代码用[code] [/code]
-..- .---- .----
注册时间 11:00:34
最后登录 11:42:23
用户头衔:注册会员
状态:我不在线
经抓包分析,服务器发向客户端的ack有一部分有于防火墙的原因,客户端没收到,在抓包软件中的提示中看到 如:tcp slow ack 和tcp connect repeated attempt,然后看到服务器发给客户端的包中 tcp flag字段 reset 是1
但是这样好象也不是能解释 客户端会关闭 的真正原因吧
还有就是我在所抓的包中看不出来有fin包
无语问苍天
注册时间 11:00:34
最后登录 11:42:23
用户头衔:注册会员
状态:我不在线
经分析,客户端的关闭有可能是因为 writen函数产生SIG_PIPE信号或者readn函数产生SIG_SEGV信号而终止进程
现在我读信号处理不清楚,哪位兄弟能告诉我在代码什么位置加什么代码吗,我的客户端是要一直运行下去的呀
无语问苍天
注册时间 11:00:34
最后登录 11:42:23
用户头衔:注册会员
状态:我不在线
我添加了信号处理及io复用后,测试结果是信号确实会产生,然后程序终止,但是按要求产生信号后,只需提示一下即可,然后程序继续运行,我不知道这个处理函数怎么写,好象handler怎么写也会不到upload函数中让它继续运行呀(现在是捕捉到信号后,不停地打印handler中的printf,然后终止了):
void handler(){printf("error caused by signal\n");}
int upload(){
3//文件标识符
size_//读取长度
//结构,用来取得文件大小
unsigned char buf[1024+1];//缓冲区
struct sockaddr_
fd_set rfd,wfd,
//初始化套接口,hostname和port是经过参数初始化了的服务器ip和端口
servaddr.sin_family=AF_INET:
servaddr.sin_port=htons(port);
if(inet_pton(AF_INET,hostname,&servaddr.sin_addr)&=0){
perror("inet_pton");
fcntl(sockfd,F_SETFD,O_NONBLOCK);
timeout.tv_sec=2;
timeout.tv_usec=0;
newact.sa_flags=0;
sigemptyset(&newact.sa_mask);
sigaddset(&newact.sa_mask,SIGPIPE);
sigaddset(&newact.sa_mask,SIGSEGV);
if(sigaction(SIGPIPE,&newact,NULL)&0){
printf("sigsegv output info\n");
if(sigaction(SIGSEGV,&newact,NULL)&0){
printf("sigpipe output info\n");
stat(filename,&buffer);//取得文件属性
//打开文件
if((f=open("filename",O_RDONLY))&0){
perror("can't open file");
//生成套接口
if(sockfd=socket(AF_INET,SOCK_STREAM,0)&0){
perror("socket");
//连接服务器
if(connect(sockfd,(struct sockaddr *)&seraddr,sizeof(struct sockaddr))&0)
perror("connect");
close(sockfd);
resize=buffer.st_//文件大小
FD_ZERO(&rfd);
FD_ZERO(&wfd);
FD_ZERO(&efd);
FD_SET(f,&rfd);
FD_SET(sockfd,&wfd);
FD_SET(sockfd,&efd);
ret=select(sockfd+1,&rfd,&wfd,&efd,&timeout);
if(ret==0)
if(ret&0){
perror("select error:");
if(FD_ISSET(f,&rfd)&&FD_ISSET(sockfd,&wfd)){
while(rsize&0){
resize -=readn(f,buf,1024);//readn()函数是经过封装了read函数能准确读一定字节文件的函数
writen(sockfd,buf,1024);//和readn函数一样封装过write函数
close(sockfd);
无语问苍天
注册时间 23:33:02
最后登录 16:41:12
用户头衔:注册会员
状态:我不在线
你的newact好像没设置处理函数吧另外你的handler也不符合处理函数的原型man sigaction 看看
#include &signal.h&
int sigaction(int signum, const struct sigaction *act, struct sigaction
struct sigaction {
void (*sa_handler)(int);
void (*sa_sigaction)(int, siginfo_t *, void *);
sigset_t sa_
void (*sa_restorer)(void);
-..- .---- .----
注册时间 11:00:34
最后登录 11:42:23
用户头衔:注册会员
状态:我不在线
问题解决了,在产生信号之前下工夫,当受到fin时continue
无语问苍天
Processed in : 0.019000 second(s) (C)2014LinuxSir -SQL Server 服务器端和客户端是怎样进行通信的?_百度知道
SQL Server 服务器端和客户端是怎样进行通信的?
提问者采纳
默认情况下,SQL Server使用1433端口监听,很多人都说SQL Server配置的时候要把这个端口改变,这样别人就不能很容易地知道使用的什么端口了。可惜,通过微软未公开的1434端口的UDP探测可以很容易知道SQL Server使用的什么TCP/IP端口了。不过微软还是考虑到了这个问题,毕竟公开而且开放的端口会引起不必要的麻烦。在实例属性中选择TCP/IP协议的属性。选择隐藏 SQL Server 实例。如果隐藏了 SQL Server 实例,则将禁止对试图枚举网络上现有的 SQL Server 实例的客户端所发出的广播作出响应。这样,别人就不能用1434来探测你的TCP/IP端口了(除非用Port Scan)。
提问者评价
其他类似问题
26人觉得有用
服务器端的相关知识
等待您来回答
您可能关注的推广
下载知道APP
随时随地咨询
出门在外也不愁当前所在位置:&&一种基于线程池的命名管道服务器并发通信方法
一种基于线程池的命名管道服务器并发通信方法
项目编号:
技术简要说明
本发明公开了一种基于线程池的命名管道服务器并发通信方法,包括以下步骤:1)服务器端的读线程接收到连自客户端的操作请求命令;2)读线程将接收到的操作请求打包生成一个输入消息,并保存到输入消息缓冲区;3)业务逻辑线程池从中取出一个输入消息,并根据消息内定义的操作类型,进行对应的操作;操作完成后,线程池将相应的操作结果打包生一个输出消息,并将其保存到输出消息缓冲区;4)当服务器端的写线程监测到输出消息缓冲区存在输出消息时,则从该队列中获取输出消息,然后根据消息中的通信标识,将相应的操作结果返回到对应的客户端。本发明分别用两个线程实现客户端与服务器之间的数据读取与发送,保证了系统的可靠性与实时性。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。
该专利全部权利属于南京国电南自美卓控制系统有限公司,未经南京国电南自美卓控制系统有限公司许可,擅自商用是侵权行为。
买专利,获国家政策扶持,提升产品附加值!想买这个专利请加我们的QQ:
专利权信息
专利类型:发明
专利申请日:
公开(公告)日:
申请(专利权)人:南京国电南自美卓控制系统有限公司
申请人:南京国电南自美卓控制系统有限公司
公开(公告)号:CNA
分类号:H04L12/861(2013.01)I
发明(设计)人:廖环宇;吴胜华
国别省市:
总流量:123
录入日期: 18:23
温馨提示:该专利受国家知识产权法保护。如您希望使用该专利,请联系专利权人,获得专利权人的授权许可。
一种基于线程池的命名管道服务器并发通信方法,其特征在于,包括以下步骤:1)客户端发出请求;2)服务器端的读线程接收到连自客户端的操作请求命令;3)读线程将接收到的操作请求打包生成一个输入消息,并保存到输入消息缓冲区;4)当输入消息缓冲区不为空时,业务逻辑线程池从中取出一个输入消息,并根据消息内定义的操作类型,进行对应的操作;当操作完成后,线程池将相应的操作结果打包生一个输出消息,并将其保存到输出消息缓冲区;5)当服务器端的写线程监测到输出消息缓冲区存在输出消息时,则从该队列中获取输出消息,然后根据消息中的通信标识,将相应的操作结果返回到对应的客户端;6)客户端接收回复。
暂无相关信息。
暂无相关信息。
暂无相关信息。
申请(专利)号
授权公告号
法律状态公告日
法律状态类型&
&实质审查的生效
&实质审查的生效&IPC(主分类):H04L
12/861&申请日:&
申请(专利)号
授权公告号
法律状态公告日
法律状态类型&
 费用金额
 费用种类
缴费人信息
 发明专利申请费
 南京国电南自美卓控制系统有限公司
 处理结束
 发明专利文印费
 南京国电南自美卓控制系统有限公司
 处理结束
 发明专利申请审查费
 南京国电南自美卓控制系统有限公司
 处理结束
上一篇:下一篇:
您如果有意向投资或咨询,请给技术持有人留言或评论该专利
您的称谓:输入您的称谓
您的电话:输入您的联系电话,您的电话是保密的,只有项目方才可以看到您的电话,不泄露。
评估价格:万您认为这个专利价值多少?
网站名称:提示:应用技术网
您对此资讯有什么独到的见解?写出来,让大家看到您的观点。
还没有人发表对该专利的看法,您来做第一个吧。
共0条评论,每页显示10条
最新出售专利
说明书截图
暂无缩略图。
资讯24小时top10网络编程,多线程并发在什么地方有应用
[问题点数:40分,结帖人Mainstream_Code]
网络编程,多线程并发在什么地方有应用
[问题点数:40分,结帖人Mainstream_Code]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。

我要回帖

更多关于 服务器系统有哪些 的文章

 

随机推荐