server
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define PORT 1234
#define BACKLOG 1
int main(void) {
int listenfd,connectfd;
struct sockaddr_in server,client;
socklen_t sin_size;
if((listenfd=socket(AF_INET,SOCK_STREAM,0))==-1){
perror("create socket failed");
exit(-1);
}
int opt = SO_REUSEADDR;
setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
bzero(&server,sizeof(server));
server.sin_family=AF_INET;
server.sin_port=htons(PORT);
server.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(listenfd,(struct sockaddr*)&server,sizeof(struct sockaddr))==-1){
perror("Bind error");
exit(-1);
}
if(listen(listenfd,BACKLOG)==-1){
perror("listen error");
exit(-1);
}
sin_size=sizeof(struct sockaddr_in);
while(1){
if((connectfd=accept(listenfd,(struct sockaddr*)&client,&sin_size))==-1){
perror("accept error.");
exit(-1);
}
printf("You get a connection from ip=%s,port=%d\n",inet_ntoa(client.sin_addr),client.sin_port);
send(connectfd,"Welcome to my server.\n",22,0);
close(connectfd);
}
}
client
#include <unistd.h>
#include<sys/socket.h>
#include <netinet/in.h>
#include<netdb.h>
#include<string.h>
#define PORT 1234
#define MAXDATASIZE 100
int main(int argc,char*argv[]){
int fd,numbytes;
char buf[MAXDATASIZE];
struct hostent*he;
struct sockaddr_in server;
if(argc!=2){
printf("Usage:%s<IP address>\n",argv[0]);
exit(-1);
}
if((he=gethostbyname(argv[1]))==NULL){
perror("gethostbyname error.");
exit(1);
}
if((fd=socket(AF_INET,SOCK_STREAM,0))==-1){
perror("Create socket failed.");
exit(1);
}
bzero(&server,sizeof(server));
server.sin_family=AF_INET;
server.sin_port=htons(PORT);
server.sin_addr=*((struct in_addr*)he->h_addr);
if(connect(fd,(struct sockaddr*)&server,sizeof(struct sockaddr))==-1){
perror("connect failed.");
exit(1);
}
if((numbytes=recv(fd,buf,MAXDATASIZE,0))==-1){
perror("recv error.");
exit(1);
}
buf[numbytes]='\0';
printf("Server Message:%s\n",buf);
close(fd);
}