当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 7 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [问题]即时通信的C语言代码
帖子发表于 : 2007-10-12 23:18 

注册: 2007-07-16 18:40
帖子: 52
地址: 浙江
送出感谢: 0 次
接收感谢: 0 次
哪位能提供一下小弟在ubuntu下即时通信的C语言代码
听老师说只要50行左右,以前没弄过,希望各位能提供一个让小弟参考一下


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-10-13 1:34 

注册: 2006-11-26 14:41
帖子: 122
送出感谢: 0 次
接收感谢: 0 次
如果不用 套接字,十几行就搞定了


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-10-13 14:48 
头像

注册: 2005-10-02 8:22
帖子: 723
送出感谢: 0 次
接收感谢: 0 次
用套接字,估计几十行也能搞定。


_________________
子曰,三人行,必有我师,吾曰,世间万物,皆为我师.


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-10-13 20:18 
头像

注册: 2005-08-22 14:05
帖子: 1743
地址: 离开北京
送出感谢: 1
接收感谢: 3
udp的 基本就是这样了
连接端
代码:
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <unistd.h>

#define MAXLINE 80
#define SERV_PORT 8888

void do_cli(FILE *fp, int sockfd, struct sockaddr *pservaddr, socklen_t servlen){
   int n;
   char sendline[MAXLINE], recvline[MAXLINE + 1];

   /* connect to server */
   if(connect(sockfd, (struct sockaddr *)pservaddr, servlen) == -1){
      perror("connect error");
      exit(1);
   }

   while(fgets(sendline, MAXLINE, fp) != NULL){
      /* read a line and send to server */
      write(sockfd, sendline, strlen(sendline));
      /* receive data from server */
      n = read(sockfd, recvline, MAXLINE);
      if(n == -1){
         perror("read error");
         exit(1);
      }
      recvline[n] = 0; /* terminate string */
      fputs(recvline, stdout);
   }
}

int main(int argc, char **argv){
   int sockfd;
   struct sockaddr_in servaddr;
   /* check args */
   if(argc != 2){
      printf("usage: udpclient <IPaddress>\n");
      exit(1);
   }
   /* init servaddr */
   bzero(&servaddr, sizeof(servaddr));
   servaddr.sin_family = AF_INET;
   servaddr.sin_port = htons(SERV_PORT);
   if(inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0){
      printf("[%s] is not a valid IPaddress\n", argv[1]);
      exit(1);
   }

   sockfd = socket(AF_INET, SOCK_DGRAM, 0);
   do_cli(stdin, sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
   return 0;
}


侦听端
代码:
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>

#define MAXLINE 80
#define SERV_PORT 8888

void do_echo(int sockfd, struct sockaddr *pcliaddr, socklen_t clilen){
   int n;
   socklen_t len;
   char mesg[MAXLINE];

   while(1){
      len = clilen;
      /* waiting for receive data */
      n = recvfrom(sockfd, mesg, MAXLINE, 0, pcliaddr, &len);
      /* sent data back to client */
      sendto(sockfd, mesg, n, 0, pcliaddr, len);
      fputs(mesg, stdout);
   }
}

int main(void){
   int sockfd;
   struct sockaddr_in servaddr, cliaddr;
   
   sockfd = socket(AF_INET, SOCK_DGRAM, 0); /* create a socket */
   
   /* init servaddr */
   bzero(&servaddr, sizeof(servaddr));
   servaddr.sin_family = AF_INET;
   servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
   servaddr.sin_port = htons(SERV_PORT);
   
   /* bind address and port to socket */
   if(bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1){
      perror("bind error");
      exit(1);
   }
   do_echo(sockfd, (struct sockaddr *)&cliaddr, sizeof(cliaddr));

   return 0;
}


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2007-10-13 21:02 

注册: 2007-07-16 18:40
帖子: 52
地址: 浙江
送出感谢: 0 次
接收感谢: 0 次
谢谢各位


页首
 用户资料  
 
6 楼 
 文章标题 : 好东西
帖子发表于 : 2007-10-20 2:33 

注册: 2007-10-05 1:36
帖子: 29
地址: 江西
送出感谢: 0 次
接收感谢: 0 次
谢谢,版主了,


_________________
我喜欢,我追求......


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2007-10-22 22:54 

注册: 2007-04-09 15:30
帖子: 40
送出感谢: 0 次
接收感谢: 0 次
ttand 写道:
udp的 基本就是这样了
连接端
代码:
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <unistd.h>

#define MAXLINE 80
#define SERV_PORT 8888

void do_cli(FILE *fp, int sockfd, struct sockaddr *pservaddr, socklen_t servlen){
   int n;
   char sendline[MAXLINE], recvline[MAXLINE + 1];

   /* connect to server */
   if(connect(sockfd, (struct sockaddr *)pservaddr, servlen) == -1){
      perror("connect error");
      exit(1);
   }

   while(fgets(sendline, MAXLINE, fp) != NULL){
      /* read a line and send to server */
      write(sockfd, sendline, strlen(sendline));
      /* receive data from server */
      n = read(sockfd, recvline, MAXLINE);
      if(n == -1){
         perror("read error");
         exit(1);
      }
      recvline[n] = 0; /* terminate string */
      fputs(recvline, stdout);
   }
}

int main(int argc, char **argv){
   int sockfd;
   struct sockaddr_in servaddr;
   /* check args */
   if(argc != 2){
      printf("usage: udpclient <IPaddress>\n");
      exit(1);
   }
   /* init servaddr */
   bzero(&servaddr, sizeof(servaddr));
   servaddr.sin_family = AF_INET;
   servaddr.sin_port = htons(SERV_PORT);
   if(inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0){
      printf("[%s] is not a valid IPaddress\n", argv[1]);
      exit(1);
   }

   sockfd = socket(AF_INET, SOCK_DGRAM, 0);
   do_cli(stdin, sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
   return 0;
}


侦听端
代码:
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>

#define MAXLINE 80
#define SERV_PORT 8888

void do_echo(int sockfd, struct sockaddr *pcliaddr, socklen_t clilen){
   int n;
   socklen_t len;
   char mesg[MAXLINE];

   while(1){
      len = clilen;
      /* waiting for receive data */
      n = recvfrom(sockfd, mesg, MAXLINE, 0, pcliaddr, &len);
      /* sent data back to client */
      sendto(sockfd, mesg, n, 0, pcliaddr, len);
      fputs(mesg, stdout);
   }
}

int main(void){
   int sockfd;
   struct sockaddr_in servaddr, cliaddr;
   
   sockfd = socket(AF_INET, SOCK_DGRAM, 0); /* create a socket */
   
   /* init servaddr */
   bzero(&servaddr, sizeof(servaddr));
   servaddr.sin_family = AF_INET;
   servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
   servaddr.sin_port = htons(SERV_PORT);
   
   /* bind address and port to socket */
   if(bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1){
      perror("bind error");
      exit(1);
   }
   do_echo(sockfd, (struct sockaddr *)&cliaddr, sizeof(cliaddr));

   return 0;
}



这listen端有点错。要加上一句

void do_echo(int sockfd, struct sockaddr *pcliaddr, socklen_t clilen){
int n;
socklen_t len;
char mesg[MAXLINE];

while(1){
len = clilen;
/* waiting for receive data */
n = recvfrom(sockfd, mesg, MAXLINE, 0, pcliaddr, &len);
/* sent data back to client */
mesg[n]='\0';
sendto(sockfd, mesg, n, 0, pcliaddr, len);
fputs(mesg, stdout);
}
}


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 7 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译