当前位置:  技术问答>linux和unix

怎么实现server和client双向聊天的SOCKET,我哪错了

    来源: 互联网  发布时间:2016-04-02

    本文导语:  server的 #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #define SERVER_PORT 8100 #define LENGTH_OF_LISTEN_QUEUE 10 int main(int argc,char*argv) { char buff[100],buf[100]; int m,n; int ...

server的

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define SERVER_PORT 8100
#define LENGTH_OF_LISTEN_QUEUE 10

int main(int argc,char*argv)
{
char buff[100],buf[100];
int m,n;
int servfd,clifd;
struct sockaddr_in cliaddr;

servfd=socket(AF_INET,SOCK_STREAM,0);
if(servfd==-1)
{
printf("errno=%dn",errno);
exit(1);
}
else
{
printf("socket create successfullyn");
}
struct sockaddr_in servaddr;
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(SERVER_PORT);
servaddr.sin_addr.s_addr=htons(INADDR_ANY);
bzero(&(servaddr.sin_zero),8);
if(bind(servfd,(struct sockaddr*)&servaddr,sizeof(servaddr))!=0)
{
printf("bind failed"); printf("errno=%dn",errno);
exit(1);
}
else 
{
printf("bind successfullyn");}


if(listen(servfd,LENGTH_OF_LISTEN_QUEUE!=0))
{
printf("listen errorn");
exit(1);
}
else
{
printf("listen successfullyn");
}

while(1)
{

socklen_t len=sizeof(cliaddr);
clifd=accept(servfd,(struct sockaddr *)&cliaddr,&len);
if(clifd>0)
{
printf("accept successfullyn");

}

printf("from client,IP:%s,Port:%dn",inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));
int closing=0;
while(closing==0)
{
while((n=recv(clifd,buff,100,0))>0)
{

printf("number of receive types=%dn",n);
write(STDOUT_FILENO,buff,n);
break;
}
printf("Input buffn");
scanf("%s",&buf);
send(clifd, buf, strlen(buf), 0);
buf[101] ='';

if(strcmp(buff,"close")==0)
{
closing=1;
printf("client is closingn");
break;
}
}
close(clifd);
close(servfd);
}
return 0;
}

|

while((m=clifd(servfd,buf,100,0))>0)
这是什么?

两个输入源,STDIN和socket,需要用select,或者多线程。

|
你可以考虑使用SELECT方式来实现,不然在读时会等待而僵死ing

    
 
 

您可能感兴趣的文章:

  • PHP双向队列实现代码
  • C#实现https双向认证的实例代码
  • 客户端程序和服务器程序间能否通过管道来实现数据的双向传递啊?
  • PHP小教程之实现双向链表
  • C++ 模版双向链表的实现详解
  • 如何用C++实现双向循环链表
  • python双向链表实现实例代码
  • C++ 构造双向链表的实现代码
  • java数据结构之实现双向链表的示例
  • Hibernate一对多关联双向关联代码实现分享
  • C语言双向链表的表示与实现实例详解
  • java双向循环链表的实现代码
  • 如何用PUSH技术实现JSP的聊天室
  • 我想把csdn的论坛改成一个软件平台,另外增加数据查询功能,聊天功能,不知怎样实现比较好?我想用jbuider 7+SQL server实现,不知如何?
  • 聊天室只用javabean 不用jdbc连数据库能实现吗?
  • 请问聊天室中显示用户在线离线的原理是怎样?有哪些方法实现呢?
  • 单个消息队列能实现进程间聊天功能吗?
  • Linux音频, Linux下能否实现 实时语音聊天 ?
  • python的tkinter布局之简单的聊天窗口实现方法
  • 一个简单的linux课程设计--《基于socket聊天室的设计与实现》 帮忙分析下~
  • 用JAVA实现语音交互的功能(即语音聊天室的功能)
  • php socket实例之telnet实现的聊天程序
  • linux中通过管道实现qq的聊天功能,用到了线程
  • 这个程序为什么不能实现聊天?
  • 求命名管道FIFO编写两个程序,实现通信,简单聊天功能。
  • php socket实现的聊天室代码分享
  • android 仿微信聊天气泡效果实现思路
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 通过javascript实现DIV居中,兼容各浏览器版本
  • socket实现多文件并发传输,求助多线程实现问题?
  • Python GUI编程:tkinter实现一个窗口并居中代码
  • interface 到底有什么用???实现接口,怎么实现??
  • 通过javascript库JQuery实现页面跳转功能代码
  • 怎么用Jsp实现在页面实现树型结构?
  • javascript开源软件 iis7站长之家
  • windows 下的PortTunnel 在linux下怎么实现?或者相应的已经实现的软件?端口映射
  • php实现socket实现客户端和服务端数据通信源代码
  • 网站重定向用C语言实现iptables,ACL实现
  • flash AS3反射实现(describeType和getDefinitionByName)
  • 在linux下如何编程实现nslookup命令实现的IP地址和域名互相转换的功能?
  • boost unordered_map和std::list相结合的实现LRU算法
  • 求在freebsd+Squid下实现pc上网的透明代理的实现方法!给出具体配置方法的高分谢!
  • c#通过委托delegate与Dictionary实现action选择器代码举例
  • linux下如实现与window下的驱动器实现文件共享??
  • 使用java jdk中的LinkedHashMap实现简单的LRU算法
  • qt如何实现:操作键盘实现数据的滚动?
  • iphone cocos2d 精灵的动画效果(图片,纹理,帧)CCAnimation实现
  • 我想用APPLET实现读取客户端的图片文件,该如何实现?
  • c语言判断某一年是否为闰年的各种实现程序代码
  • PING是用TCP,还是用UDP来实现的?或是采用其它协议实现的?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3