⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chatcli.c

📁 linux下开发的网络聊天程序
💻 C
字号:
/* 
 Chatroom client using fork
 Copyright (C) 2004-2006, Li Suke, School of Software and Microelectronics,
 Peking University
 This  is free software; you can redistribute it and/or
 modify it freely.

 This software  is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
*/

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <sys/select.h>
#define BUF_SIZE 1024

void str_cli(char *name,FILE *fp, int sockfd)
{
    
   int len= BUF_SIZE;
   char	sendline[BUF_SIZE], recvline[BUF_SIZE];
   char sendline2[BUF_SIZE];
   pid_t pid;
   pid = fork();

   if(pid == 0){
     for(;;){
        len = recv(sockfd, recvline, len,0);
        if(len ==0)
           exit(0);  
        fputs(recvline, stdout);
     }
   }else{ 

     for(;;){
        strcpy(sendline2,name);
        if (fgets(sendline, BUF_SIZE, fp) == NULL) {
            shutdown(sockfd, SHUT_WR);	/* send FIN */
            exit(0);
        }      
        strcat(sendline2,sendline);
         
        if(send(sockfd, sendline2, len,0)<=0){
            perror("send");
        }
     }
   }
}
int main(int argc, char **argv)
{
   int sockfd;
   struct sockaddr_in	servaddr;
   char buffer[BUF_SIZE];
   char name[BUF_SIZE];
   const char *enter = " enter the chatroom ";
   int len;
   if (argc != 4){
       printf("Usage: chatcli name serverip serverpot\n");
       exit(0);
   }
   strcpy(name,argv[1]);
   strcat(name," said:");   
   sockfd = socket(AF_INET, SOCK_STREAM, 0);
   bzero(&servaddr, sizeof(servaddr));
   servaddr.sin_family = AF_INET;
   servaddr.sin_port = htons(atoi(argv[3]));
   inet_pton(AF_INET, argv[2], &servaddr.sin_addr);
   if(connect(sockfd, (struct sockaddr*) &servaddr, sizeof(servaddr))==-1){ 
      perror("connect");
      exit(1);
   };
   len = BUF_SIZE;
   snprintf(buffer,len,"%s%s\n",argv[1],enter);
   if(send(sockfd,buffer,len,0)==-1){
      perror("send");
      exit(1);
   }
   str_cli(name,stdin, sockfd);
   exit(0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -