TCP通信程序设计
//Tnet.h
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<netdb.h>
#include<sys/types.h>
#include<pthread.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<unistd.h>
#include<sys/wait.h>
#include <arpa/inet.h>
#define SERVPORT 12306
#define BACKLOG 10
#define MAXDATASIZE 100
//Tserver.c
#include "Tnet.h"
int main()
{
int sockfd,client_fd,recvbytes;
char buf[MAXDATASIZE];
struct sockaddr_in my_addr;
struct sockaddr_in remote_addr;
int sin_size;
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket create error!");
exit(1);
}
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(SERVPORT);
my_addr.sin_addr.s_addr=INADDR_ANY;
bzero(&(my_addr.sin_zero),8);
if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr))==-1)
{
perror("bind failed!");
exit(1);
}
if(listen(sockfd,BACKLOG)==-1)
{
perror("listen failed!");
exit(1);
}
while(1)
{
sin_size=sizeof(struct sockaddr_in);
if((client_fd=accept(sockfd,(struct sockaddr*)&remote_addr,&sin_size))==-1)
{
perror("accept error!");
continue;
}
printf("accept a connection from %s\n ",inet_ntoa(remote_addr.sin_addr));
if(!fork())
{
if(send(client_fd,"link successful\n",26,0)==-1)
perror("send error!");
exit(0);
}
close(client_fd);
}
}
//Tclient.c
#include "Tnet.h"
int main(int argc,char *argv[])
{
int sockfd,recvbytes;
char buf[MAXDATASIZE];
struct hostent *host;
struct sockaddr_in serv_addr;
if(argc<2)
{
fprintf(stderr,"error!\n");
exit(1);
}
if((host=gethostbyname(argv[1]))==NULL)
{
perror("gethostbyname error!\n");
exit(1);
}
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket failed!");
exit(1);
}
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(SERVPORT);
serv_addr.sin_addr=*((struct in_addr *)host->h_addr);
bzero(&(serv_addr.sin_zero),8);
if(connect(sockfd,(struct sockaddr*)&serv_addr,sizeof(struct sockaddr))==-1)
{
perror("connect failed!");
exit(1);
}
if((recvbytes=recv(sockfd,buf,MAXDATASIZE,0))==-1)
{
perror("receive failed!");
exit(1);
}
buf[recvbytes]='\0';
printf("receive:%s",buf);
send(sockfd,"wenjiajun",9,0);
close(sockfd);
}