首页 > 代码库 > linux网络通信

linux网络通信

很老了的代码了,呵呵  最近在复习呢

//server
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>


typedef struct sockaddr SA;
int main(int argc,char **argv)
{
    int listenfd;    //也是以文件为操作,linux都是以文件为基础
    int confd;

    socklen_t clilen;
    struct sockaddr_in myaddr,cliaddr;
    char buf[50] = "Welcome";

    listenfd = socket(PF_INET,SOCK_STREAM,0)
    if(listenfd<0)
    {
        perror("fail to connect");
        exit(-1);
    }

//数据初始化
    bzero(&myaddr,sizeof(myaddr));
    myaddr.sin_family = PF_INET;
    myaddr.sin_addr.s_addr = inet_addr("192.168.1.1"); //ip
    myaddr.sin_port = htons(8888); //端口号


//绑定? 为什么要强制转换?
    if(bind(listenfd,(SA *)&myaddr,sizeof(myaddr))<0)
    {
        perror("fail to bind");
        exit(-1);
    }
    listen(listenfd,5);

    while(1)
    {
        confd = accept(listenfd,(SA *)&cliaddr,sizeof(cliaddr));
        printf("connection from %s,port %d\n",inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));
        send(connfd,buf,sizeof(buf),0);
        close(connfd);
    }

    return 0;
}
//client

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>


typedef struct sockaddr SA;
int main(int argc,char **argv)
{
    int sockfd,nbyte;
    struct sockaddr_in servaddr,myaddr;
    char buf[50];

    sockfd = socket(PF_INET,SOCK_STREAM,0);
    if(sockfd<0)
    {
        perror("fail to connect\n");
        exit(-1);
    }

    memset(0,&servaddr,sizeof(servaddr));
    servaddr.sin_family = PE_INET;
    servaddr.sin_addr.s_addr = inet_addr("192.168.1.1");  //server ip
    servaddr.sin_port = htons(8888);

    if(connect(sockfd,(SA *)&servaddr,sizeof(servaddr))<0)
    {
        perror("connect error");
        exit(-1);
    }

    if((nbyte = recv(sockfd,buf,50,0))<0)
    {
        perror("fail to recv");
        exit(-1);
    }

    printf("recv from server:%s\n", buf);

    return 0;
}

主要就是一个结构体 

struct sockaddr_in 
以及几个函数的操作,对于超时网络异常等需要有异常的维护

linux网络通信