`
shaojiashuai123456
  • 浏览: 256355 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
社区版块
存档分类
最新评论

c socket 编程(TCP服务器端代码)

阅读更多
1.文件名为 connect.h

   

#ifndef CONNECT_H
#define CONNECT_H

/******************
**功能:连接初始化
**输入:port 端口,listen_fd1 监听文件
**输出:返回监听文件
******************/
int connect_init(int port,int *listen_fd1); //初始化socket,建立连接

/******************
**功能:发送功能
**输入:com_fd 客户端文件,buf 发送信息,len 信息长度
**输出:返回1表示发送成功,0表示不成功
******************/
int connect_sendMessage(int com_fd,char *buf,int len); //发送消息到后台

/******************
**功能:接受信息功能
**输入:com_fd 客户端文件,buf 接受信息,len 信息长度
**输出:返回1表示发送成功,0表示不成功
******************/
int connect_receiveMessage(int com_fd,char *buf,int len); //前台接收消息

#endif
2。文件名为connect.c
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<errno.h>
#include<unistd.h>
#include<sys/wait.h>
#include<netdb.h>
#include<pthread.h>

/******************
**功能:连接初始化
**输入:port 端口,listen_fd1 监听文件
**输出:返回监听文件
******************/
int connect_init(int port,int *listen_fd1){
    int listen_fd;
    int com_fd;
    int ret;
    int len;
    struct sockaddr_in client_addr;
    struct sockaddr_in server_addr;
    
    pthread_t pthread_id;
    
    listen_fd = socket(AF_INET, SOCK_STREAM, 0);
    if(listen_fd == -1){
        perror("listen_fd error");
        return 1;
    }
    memset(&server_addr,0,sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = port;
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    
    ret = bind(listen_fd, (struct sockaddr *)&server_addr, sizeof(server_addr));
    if(ret == -1){
        perror("connot bind server socket");
        close(listen_fd);
        return 1;
    }
   
    ret = listen(listen_fd, 1);    
    if(ret == -1){
        perror("connot listen the client connect request");
        close(listen_fd);
        return 1;
    }
     *listen_fd1=listen_fd;
}

/******************
**功能:发送功能
**输入:com_fd 客户端文件,buf 发送信息,len 信息长度
**输出:返回1表示发送成功,0表示不成功
******************/
int connect_sendMessage(int com_fd,char *buf,int len){
     if(len>0){
          send(com_fd,buf,len,0);
          return 1;
     }
     else return 0;
}
/******************
**功能:接受信息功能
**输入:com_fd 客户端文件,buf 接受信息,len 信息长度
**输出:返回1表示发送成功,0表示不成功
******************/
int connect_receiveMessage(int com_fd,char *buf,int len){
    int size;
    size=recv(com_fd,buf,len,0);
    if(size>0){
       buf[size]='\0';
       return size;
    }
    else return 0;
}

   

    

  使用上面的函数

   

#include <stdio.h>
#include "connect.h"


int main(int argc, char *argv[])
{
    int port = 5000;
    int listen_fd;
    
    struct sockaddr_in client;
    socklen_t   client_len;
    int size= sizeof(client_len);
    char buf[1024];
    //初始化
    connect_init(port,&listen_fd);
    while(1){
         //建立连接
         com_fd = accept(listen_fd,(struct sockaddr *)&client,&size);
		 printf("connect\n");
         //接收客户端信息
		 connect_receiveMessage(com_fd,buf,1024);
         //发送信息
         connect_sendMessage(com_fd,"N",1);
         //关闭与客户端连接
    	 close(com_fd);  
    }
     //关闭服务器socket文件描述符
     close(listen_fd);
     return 0;
}

 

0
0
分享到:
评论
1 楼 hhb19900618 2013-12-14  
你好 请问怎么处理 客户端 socket发送数据超时后的崩溃问题呢?

相关推荐

Global site tag (gtag.js) - Google Analytics