linux socket
server:
#include<stdio.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<memory.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include <arpa/inet.h>
#include<time.h>
void printerror(){
    fprintf(stderr,"errno=%d,msg=%s\n",errno,strerror(errno));
}
int main(int argc,char** argv){
    int port=atoi(argv[1]);
    int sockfd;
    sockfd=socket(AF_INET,SOCK_STREAM,0);
    if(sockfd==-1){
        printerror();
    }
 int flag=1;
 setsockopt (sockfd,SOL_SOCKET ,SO_REUSEADDR,&flag,sizeof(falg));
    struct sockaddr_in serveraddr;
    struct sockaddr_in clientaddr;
    memset(&serveraddr,0,sizeof(struct sockaddr_in));
    memset(&clientaddr,0,sizeof(struct sockaddr_in));
    serveraddr.sin_family=AF_INET;
    serveraddr.sin_port=htons(port);
    serveraddr.sin_addr.s_addr=0;    //0==INADDR_ANY
//    serveraddr.sin_addr.s_addr=INADDR_ANY;    
    if(bind(sockfd,(struct sockaddr*)&serveraddr,sizeof(struct sockaddr))==-1){
        printerror();
    }
    
    if(listen(sockfd,10)==-1){
        printerror();
    }
    int len=sizeof(struct sockaddr);
    int sofd=-1;
    if((sofd=accept(sockfd,(struct sockaddr*)&clientaddr,&len))==-1){
        printerror();
    }
    struct sockaddr_in client;
    len=sizeof(struct sockaddr);
    memset(&client,0,len);
    getpeername(sofd,(struct sockaddr *)&client,&len);//根据fd获得对端信息
    char ip[16]={0};
    inet_ntop(AF_INET,&(client.sin_addr.s_addr),ip,sizeof(ip));//网络字节序ip地址转换成10进制点分
    write(STDOUT_FILENO,ip,strlen(ip));
    char buff[1024];
    memset(buff,0,sizeof(buff));
    len=-1;
    len=read(sofd,buff,sizeof(buff));
    write(STDOUT_FILENO,buff,len);
    char outbuff[1024]={0};
    sprintf(outbuff,"来自服务器:%s",buff);
    write(STDOUT_FILENO,outbuff,strlen(outbuff));
    write(sofd,outbuff,sizeof(outbuff));
    return 0;
}
client:
int main(int argc,char** argv){
    int port=atoi(argv[1]);
    int sockfd;
    sockfd=socket(AF_INET,SOCK_STREAM,0);
    if(sockfd==-1){
        printerror();
    }
    struct sockaddr_in serveraddr;
    memset(&serveraddr,0,sizeof(struct sockaddr_in));
    serveraddr.sin_family=AF_INET;
    serveraddr.sin_port=htons(port);
    inet_pton(AF_INET,"127.0.0.1",&(serveraddr.sin_addr.s_addr));    //点分10进制ip地址转换成网络字节序地址
    connect(sockfd,(struct sockaddr*)&serveraddr,sizeof(struct sockaddr));
    long t=time(0);
    char* buff=ctime(&t);    
    write(sockfd,buff,strlen(buff));
    return 0;
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号