1. TCP服务器端流程
2. TCP客户端流程
3. TCP/IP服务器端与客户端框架
示例代码:
TCP服务器端:
/*************************************************************************
@Author: wanghao
@Created Time : Fri 25 May 2018 08:09:19 PM PDT
@File Name: server.c
@Description:
************************************************************************/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>
#define N 36
#define MAXSIZE 24
void *thread_functio(void *client_fd);
int main(int argc, const char *argv[])
{
intsocketfd;
intclient_fd;
intaddrlen;
u_shortport;
pthread_ta_thread;
charbufwrite[MAXSIZE] = {0};
structsockaddr_in my_addr;
structsockaddr_in client_addr;
if(argc< 3)
{
printf("usage:%s <IPadd> <Port>\n",argv[0]);
return-1;
}
socketfd= socket(PF_INET, SOCK_STREAM, 0);
if(socket< 0)
{
perror("");
return-1;
}
port= (u_short)atol(argv[2]);
my_addr.sin_family= PF_INET;
my_addr.sin_port= htons(port);
my_addr.sin_addr.s_addr= inet_addr(argv[1]);
addrlen= sizeof(struct sockaddr_in);
if(bind(socketfd,(struct sockaddr *)(&my_addr),addrlen) < 0)
{
perror("");
return-2;
}
listen(socketfd,N);
if((client_fd= accept(socketfd,(struct sockaddr *)(&client_addr),&addrlen)) < 0)
{
perror("");
return-3;
}
printf("Iam tcp server!\n");
if(pthread_create(&a_thread,NULL, thread_functio,(void *)&client_fd) < 0)
{
perror("");
return-4;
}
while(1)
{
memset(bufwrite,0, MAXSIZE);
fgets(bufwrite,MAXSIZE, stdin);
write(client_fd,bufwrite,strlen(bufwrite));
}
close(socketfd);
close(client_fd);
return0;
}
void *thread_functio(void *client_fd)
{
charbufread[MAXSIZE] = {0};
while(1)
{
memset(bufread,0, MAXSIZE);
read(*(int*)client_fd, bufread, MAXSIZE);
printf("%s\n",bufread);
}
}
TCP客户端代码:
/*************************************************************************
@Author: wanghao
@Created Time : Fri 25 May 2018 08:09:19 PMPDT
@File Name: client.c
@Description:
************************************************************************/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>
#include <sys/stat.h>
#include <fcntl.h>
#define N 36
#define MAXSIZE 24
void *thread_functio(void *client_fd);
int main(int argc, const char *argv[])
{
intsocketfd;
intaddrlen;
intretval;
u_shortport;
pthread_ta_thread;
charbufread[MAXSIZE] = {0};
charbufwrite[MAXSIZE] = {0};
structsockaddr_in server_addr;
if(argc< 3)
{
printf("usage:%s <IPadd> <Port>\n",argv[0]);
return-1;
}
socketfd= socket(PF_INET, SOCK_STREAM, 0);
if(socket< 0)
{
perror("");
return-1;
}
port= (u_short)atol(argv[2]);
server_addr.sin_family= PF_INET;
server_addr.sin_port= htons(port);
server_addr.sin_addr.s_addr= inet_addr(argv[1]);
addrlen= sizeof(struct sockaddr_in);
if(connect(socketfd,(struct sockaddr *)(&server_addr), addrlen) < 0)
{
perror("");
return-2;
}
printf("Iam tcp client!\n");
if(pthread_create(&a_thread,NULL, thread_functio,(void *)&socketfd) < 0)
{
perror("");
return-4;
}
while(1)
{
memset(bufwrite,0, MAXSIZE);
fgets(bufwrite,MAXSIZE, stdin);
retval= write(socketfd,bufwrite, strlen(bufwrite));
if(retval< 0)
{
perror("");
return-5;
}
elseif(retval == 0)
{
perror("tcpserver off\n");
return-6;
}
}
close(socketfd);
return0;
}
void *thread_functio(void *socketfd)
{
charbufread[MAXSIZE] = {0};
while(1)
{
memset(bufread,0, MAXSIZE);
read(*(int*)socketfd, bufread, MAXSIZE);
printf("%s\n",bufread);
}
}