服务器程序:
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#define SERVPORT 3333
#define BACKLOG 10
#define MAX_CONNECTED_NO 10
#define MAXDATASIZE 10
int main()
{
struct sockaddr_in server_sockaddr,client_sockaddr;
int sin_size,recvbytes;
int sockfd,client_fd;
char buf[MAXDATASIZE];
if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1){ //新建一个socket,成功则返回socket的id并赋值给sockfd
perror("socket");
exit(1);
}
printf("socket success!,sockfd=%d\n",sockfd);
bzero(&(server_sockaddr),sizeof(struct sockaddr_in));
server_sockaddr.sin_family=AF_INET; //对服务器的socket地址进行配置
server_sockaddr.sin_addr.s_addr=htonl(INADDR_ANY); //具体的用法参考INADDR_ANY的用法,下一篇博文
server_sockaddr.sin_port=htons(SERVPORT);
if(bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr))==-1){ //将服务器的ip及端口和刚建socket绑定
perror("bind");
exit(1);
}
printf("bind success!\n");
if(listen(sockfd,BACKLOG)==-1){ //设置允许的最大的客户端连接数
perror("listen");
exit(1);
}
printf("listening....\n");
//while(1)
//{
sin_size=sizeof(struct sockaddr_in);
if((client_fd=accept(sockfd,(struct sockaddr *)&client_sockaddr,&sin_size))==-1){ //等待客户端连接
perror("accept");
printf("%d\n",client_fd);
exit(1);
}
if((recvbytes=recv(client_fd,buf,MAXDATASIZE,0))==-1){ //接受数据
perror("recv");
exit(1);
}
printf("received a connection:%s",buf);
printf("over");
//}
close(sockfd);
}
客服端程序:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define SERVPORT 3333
#define MAXDATASIZE 100
main(int argc,char *argv[]){
int sockfd,sendbytes;
char buf[MAXDATASIZE];
struct hostent *host;
struct sockaddr_in serv_addr;
if(argc < 2){
fprintf(stderr,"Please enter the server's hostname!\n");
exit(1);
}
printf("have enter the server's hostname!\n");
if((host=gethostbyname(argv[1]))==NULL){
perror("gethostbyname");
exit(1);
}
printf("have enter the server's hostname!%d\n",*(host->h_name));
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){
perror("socket");
exit(1);
}
bzero(&(serv_addr),sizeof(struct sockaddr));
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(SERVPORT);
serv_addr.sin_addr.s_addr = inet_addr(argv[1]);
if(connect(sockfd,(struct sockaddr *)(&serv_addr),sizeof(struct sockaddr))==-1)
{
perror("connect");
exit(1);
}
printf("the server's hostname!%d\n",sockfd);
if((sendbytes=send(sockfd,"hello",5,0))==-1){
perror("send");
exit(1);
}
printf("hostname!%d\n",sockfd);
close(sockfd);
}