简单的客户端,服务端通信

client.c代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <unistd.h>
#define BUFLEN 10
int main(int argc, char **argv)
{
    int sockfd;
    int port = 4567;
    struct sockaddr_in ser_addr;
    int len;
    char buf[BUFLEN];
     /*建立socket*/
    if ((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1){
        printf("server socket creation error\n");
        return -1;
    }else 
    printf("server socket success\n"); 

    ser_addr.sin_port = htons(port);
    ser_addr.sin_family = AF_INET;
    if (inet_aton(argv[1], (struct in_addr *)&ser_addr.sin_addr.s_addr) == 0) {
       printf("server  error\n");
        return -1;
        }
     
     /*开始连接服务器*/    
    if(connect(sockfd,(struct sockaddr*)&ser_addr,sizeof(struct sockaddr)) == -1){
        perror("connect");
        exit(errno);
    }else
        printf("conncet success!\n");
     while(1)
{
        /******接收消息*******/
        bzero(buf,BUFLEN);
    len = recv(sockfd,buf,BUFLEN,0);
    if(len > 0)
      printf("服务器发来的消息是:%s,共有字节数是: %d\n",buf,len-1);
     else
       printf("接受消息失败!\n");
    
    /******发送消息*******/ 
        bzero(buf,BUFLEN);
    printf("请输入发送给对方的消息:");
      /*fgets函数:从流中读取BUFLEN-1个字符*/
        fgets(buf,BUFLEN,stdin);
        len = send(sockfd,buf,strlen(buf),0);
        if(len > 0)
            printf("消息发送成功,本次共发送的字节数是:%d\n",len);            
        else{
             printf("聊天终止!\n");
                break;  
 }      
    }
    /*关闭连接*/
    close(sockfd);
    return 0;
}            
  
View Code

server.c代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <unistd.h>
#define BUFLEN 10
int main(int argc,char **argv)
{
int ser_sockfd,cli_sockfd;
int port = 4567;
int len;   //
struct sockaddr_in ser_addr;
struct sockaddr_in cli_addr;
char buf[BUFLEN];
 /*建立socket*/
if ((ser_sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1){
    printf("server socket creation error\n");
        return -1;
}else
printf("socket create success!\n");
 /*设置服务器ip*/
bzero(&ser_addr,sizeof(ser_addr));
ser_addr.sin_family = AF_INET;
 /*设置服务器端口*/
ser_addr.sin_port=htons(port);
if (argv[1])
        ser_addr.sin_addr.s_addr = inet_addr(argv[1]);
    else
        ser_addr.sin_addr.s_addr = INADDR_ANY;


/*把地址和端口帮定到套接字上*/
if (bind(ser_sockfd,(struct sockaddr*) &ser_addr,sizeof(struct sockaddr_in)) == -1){
 printf("server binding error\n");
        return -1;
}else
        printf("bind success!\n");

/*侦听本地端口*/
if (listen(ser_sockfd,5) == -1){
 printf("server listening error\n");
        return -1;
}else
        printf("the server is listening!\n");

  while(1){
        printf("*****************聊天开始***************\n");
if ((cli_sockfd = accept(ser_sockfd,(struct sockaddr*)&cli_addr,&len)) == -1){
printf("server acception error\n");
        return -1;
}else
  printf("正在与您聊天的客户端是:%s: %d\n",inet_ntoa(cli_addr.sin_addr),ntohs(cli_addr.sin_port));

while(1){
 /******发送消息*******/
            bzero(buf,BUFLEN);
 /*fgets函数:从流中读取BUFLEN-1个字符*/
            fgets(buf,BUFLEN,stdin);
             len = send(cli_sockfd,buf,strlen(buf),0);
            if(len > 0)
                printf("消息发送成功,本次共发送的字节数是:%d\n",len);            
            else{
                printf("消息发送失败!\n");
                break;            
            }
            /******接收消息*******/
            bzero(buf,BUFLEN);
            len = recv(cli_sockfd,buf,BUFLEN,0);
            if(len > 0)
                printf("客户端发来的信息是:%s,共有字节数是: %d\n",buf,len);
            else{
                    printf("聊天终止!\n");
                break;        
            }
        }
        /*关闭聊天的套接字*/
        close(cli_sockfd);
       
    }
    /*关闭服务器的套接字*/
    close(ser_sockfd);
    return 0;
}
View Code

 

posted @ 2017-02-15 11:29  Erinlp  阅读(192)  评论(0编辑  收藏  举报