QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 709|回复: 6

一段C语言写的网络程序,

[复制链接]
发表于 2004-4-22 19:51:29 | 显示全部楼层 |阅读模式
#include<stdio.h>
#include<unistd.h>
#include&lt;stdlib.h&gt;
#include&lt;errno.h&gt;
#include&lt;string.h&gt;
#include&lt;time.h&gt;
#include&lt;sys/socket.h&gt;
#include&lt;sys/types.h&gt;
#include&lt;netinet/in.h&gt;
#include&lt;arpa/inet.h&gt;
#include&lt;signal.h&gt;

#define TRUE 1
#define FALSE 0
int main(int argc,char **argv){
  int y,z;   
  char *srvr_addr=NULL;

  static int so_reuseaddr=TRUE;
  char *bc_addr="202.197.242.255";

  struct sockaddr_in srvradr_inet,adr_inet,bcadr_inet;
  struct sockaddr_in clntadr_inet;
  int len_inet,len_bc;
  int s;
  char dgram[512],*dgram1="quit";

  srvr_addr="202.197.242.221";
  
  len_bc=sizeof bc_addr;
  s=socket(AF_INET,SOCK_DGRAM,0);

  if(s==-1) printf("create error.\n");
  else printf("create success\n");

  srvradr_inet.sin_family=AF_INET;
  srvradr_inet.sin_port=htons(9999);
  srvradr_inet.sin_addr.s_addr=inet_addr(srvr_addr);

  len_inet=sizeof(srvradr_inet);
  bcadr_inet.sin_family=AF_INET;
  bcadr_inet.sin_port=htons(9097);
  bcadr_inet.sin_addr.s_addr=inet_addr(bc_addr);

  z=setsockopt(s,SOL_SOCKET,SO_REUSEADDR,&amp;so_reuseaddr,sizeof so_reuseaddr);

  if(z==-1) printf("setsockopt error!");
  
  y=bind(s,(struct sockaddr *)&amp;bcadr_inet,len_inet);
  
  if(z==-1) printf("bind error");
  printf("bind success!\n");

  
  while(1){
   
   
    printf("please input your messages:\n");
    fgets(dgram,sizeof dgram,stdin);
   
    if(!strcasecmp(dgram,"quit")) break;
   
    sendto(s,dgram,sizeof(dgram),0,(struct sockaddr *)&amp;srvradr_inet,len_inet);
    printf("after sendto\n");

    z=recvfrom(s,dgram,sizeof(dgram),0,(struct sockaddr *)&amp;bcadr_inet,&amp;len_inet);
     printf("the message from bcserver is: %s",dgram);

  }

  close(s);
  return 0;
}


上面这段程序是一个简单网络聊天室的客户端程序,能够运行,问题是输入字符串"quit"时,不能退出,请哪位能人指教!!
发表于 2004-4-23 11:44:37 | 显示全部楼层
dgram中总是有一个回车符,所以无论如何比也不一样.
比较之前dgram[strlen(dgram)-1]='\0';
回复

使用道具 举报

发表于 2004-4-23 11:44:59 | 显示全部楼层
dgram中总是有一个回车符,所以无论如何比也不一样.
比较之前dgram[strlen(dgram)-1]='\0';
回复

使用道具 举报

发表于 2004-4-23 11:45:37 | 显示全部楼层
dgram中总是有一个回车符,所以无论如何比也不一样.
比较之前dgram[strlen(dgram)-1]='\0';
回复

使用道具 举报

发表于 2004-4-23 11:46:21 | 显示全部楼层
dgram中总是有一个回车符,所以无论如何比也不一样.
比较之前dgram[strlen(dgram)-1]='\0';
回复

使用道具 举报

发表于 2004-4-23 11:51:10 | 显示全部楼层
斑主帮我删了多余的几个(包括这个),网络不稳造成的。
回复

使用道具 举报

发表于 2004-4-25 11:54:12 | 显示全部楼层
回了n篇,居然不显示,看来论坛有点小问题。再回,斑主看到了帮我删删(现在正在线)包括这篇。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 11:37 , Processed in 0.081594 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表