1、myhead.h
#ifndef _MYHEAD_H_
#define _MYHEAD_H_
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <sys/wait.h>
#define MYPORT 6666
#define MYADDR "192.168.1.100"
#endif
2\tcp_server.c
#include "myhead.h"
int main()
{
int sockfd = 0;
int ret = 0;
int clientfd = 0;
int recvcnt = 0;
int sendcnt = 0;
char recvbuff[20] = {0};
char sendbuff[20] = {0};
pid_t pid;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
socklen_t len = 0;
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd == -1)
{
perror("socket");
return -1;
}
printf("socket sucessfully...\n");
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(MYPORT);
server_addr.sin_addr.s_addr = inet_addr(MYADDR);
ret = bind(sockfd,(struct sockaddr *)&server_addr,sizeof(server_addr));
if(ret == -1)
{
perror("bind");
return -1;
}
printf("bind sucessfully...\n");
ret = listen(sockfd,10);
if(ret == -1)
{
perror("listen");
return -1;
}
printf("listen sucessfully...\n");
while(1)
{
clientfd = accept(sockfd,(struct sockaddr *)&client_addr,&len);
if(clientfd == -1)
{
perror("accept");
return -1;
}
printf("accept sucessully...\n");
pid = fork();
if(pid == 0)
{
while(1)
{
memset(recvbuff,0,sizeof(recvbuff));
// recvcnt = recv(clientfd,recvbuff,sizeof(recvbuff),0);
// recvcnt = read(clientfd,recvbuff,sizeof(recvbuff));
recvcnt = recvfrom(clientfd,recvbuff,sizeof(recvbuff),0,NULL,0);
if(recvcnt == -1)
{
perror("receive");
return -1;
}
else
{
printf("receive %d bytes from client: %s\n",recvcnt,recvbuff);
}
if(strcmp(recvbuff,"end") == 0)
{
break;
}
}
}
else if(pid > 0)
{
close(clientfd);
waitpid(-1,NULL,WNOHANG);
}
/*memset(sendbuff,0,sizeof(sendbuff));
printf("please input data:\n");
scanf("%s",sendbuff);
sendcnt = write(clientfd,sendbuff,strlen(sendbuff));
if(sendcnt == -1)
{
perror("server send");
return -1;
}
else
{
printf("server %d bytes:%s\n",sendcnt,sendbuff);
}
*/
}
// close(clientfd);
close(sockfd);
return 0;
}
3、tcp_client.c
#include "myhead.h"
int main()
{
int sockfd = 0;
int ret = 0;
struct sockaddr_in server_addr;
char sendbuff[20] = {0};
char recvbuff[20] = {0};
int sendcnt = 0;
int recvcnt = 0;
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd == -1)
{
perror("socket");
return -1;
}
printf("socket sucessfully...\n");
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(MYPORT);
server_addr.sin_addr.s_addr = inet_addr(MYADDR);
ret = connect(sockfd,(struct sockaddr *)&server_addr,sizeof(server_addr));
if(ret == -1)
{
perror("connect");
return -1;
}
printf("connect sucessfully...\n");
while(1)
{
memset(sendbuff,0,sizeof(sendbuff));
printf("plaese input data:\n");
scanf("%s",sendbuff);
// sendcnt = send(sockfd,sendbuff,strlen(sendbuff),0);
// sendcnt = write(sockfd,sendbuff,strlen(sendbuff));
sendcnt = sendto(sockfd,sendbuff,strlen(sendbuff),0,NULL,0);
if(sendcnt == -1)
{
perror("send");
}
else
{
printf("client send %d bytess :%s\n",sendcnt,sendbuff);
}
/*memset(recvbuff,0,sizeof(recvbuff));
recvcnt = read(sockfd,recvbuff,sizeof(recvbuff));
if(recvcnt == -1)
{
perror("recevive");
return -1;
}
else
{
printf("recieve %d bytes :%s\n",recvcnt,recvbuff);
}*/
if(strcmp(sendbuff,"end") == 0)
{
break;
}
}
close(sockfd);
return 0;
}