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号