先上传代码,后续再补充
tcp_server.c
#include <stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <unistd.h>
#define SIZE 1024
int server_init(char* addr,int port,int max_listen_queue);//socket\bind\listen
int wait_for_client(int listen_fd);
int main(int argc, char *argv[])
{
char recvbuf[SIZE] = {0};
//int listen_fd = server_init("127.0.0.1",2234,10);
int listen_fd = server_init("192.168.2.39",2234,10);
while(1)
{
int connt_fd = wait_for_client(listen_fd);
while(1)
{
memset(recvbuf,0,sizeof(recvbuf));
int count = read(connt_fd,recvbuf,sizeof(recvbuf));
if(-1 == count)
{
perror("read");
return -1;
}
else if(0 == count)
{
printf("client had quit\n");
break;
}
if(strncmp(recvbuf,"sl",2) == 0)
{
system("sl");
}
recvbuf[strlen(recvbuf)-1] = '\0';
printf("%s\n",recvbuf);
}
close(connt_fd);
}
close(listen_fd);
return 0;
}
int server_init(char* addr,int port,int max_listen_queue)//socket\bind\listen
{
int listen_fd = socket(AF_INET,SOCK_STREAM,0);
if(-1 == listen_fd)
{
perror("socket");
return -1;
}
printf("socker success.\n");
sleep(1);
struct sockaddr_in server_addr = {
.sin_family = AF_INET,
.sin_port = htons(port),
.sin_addr.s_addr = inet_addr(addr)
};
int opt = 1;
int ret_setsockopt = setsockopt(listen_fd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
if(-1 == ret_setsockopt)
{
perror("setsockopt");
return -1;
}
int ret_bind = bind(listen_fd,(struct sockaddr*)&server_addr,sizeof(struct sockaddr_in));
if(-1 == ret_bind)
{
perror("bind");
return -1;
}
printf("bind success.\n");
sleep(1);
int ret_listen = listen(listen_fd,max_listen_queue);
if(-1 == ret_listen)
{
perror("listen");
return -1;
}
printf("server init and start success.\n");
printf("waiting for client connect...\n");
return listen_fd;
}
int wait_for_client(int listen_fd)
{
struct sockaddr_in client_addr;
#if 0
int connt_fd = accept(listen_fd,NULL,NULL);
if(-1 == connt_fd)
{
perror("accept");
}
#endif
#if 1
socklen_t clen = sizeof(client_addr);
int connt_fd = accept(listen_fd,(struct sockaddr*)&client_addr,&clen);
if(-1 == connt_fd)
{
perror("accept");
}
#endif
printf("connect success %d client.\n",connt_fd-3);
printf("client (%s:%d) connect success.\n",inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port));
return connt_fd;
}
tcp_client.c
#include <stdio.h>
#include <stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <unistd.h>
#define SIZE 1024
int client_init(char* server_ip,int server_port);
int client_connect_server(int connt_fd);
int main(int argc, char *argv[])
{
char sendbuf[SIZE] = {0};
int connt_fd = client_init(argv[1],atoi(argv[2]));
// int connt_fd = client_init("127.0.0.1",2234);
while(1)
{
memset(sendbuf,0,strlen(sendbuf));
fgets(sendbuf,sizeof(sendbuf)-1,stdin);
write(connt_fd,sendbuf,strlen(sendbuf));
}
close(connt_fd);
return 0;
}
int client_init(char* server_ip,int server_port)
{
int connt_fd = socket(AF_INET,SOCK_STREAM,0);
if(-1 == connt_fd)
{
perror("socket");
return -1;
}
struct sockaddr_in server_addr = {
.sin_family = AF_INET,
.sin_port = htons(server_port),
.sin_addr.s_addr = inet_addr(server_ip)
};
int ret_connect = connect(connt_fd,(struct sockaddr*)&server_addr,sizeof(server_addr));
if(-1 == ret_connect)
{
perror("connect");
return -1;
}
printf("connect to server(%s:%d) success.\n",inet_ntoa(server_addr.sin_addr),ntohs(server_addr.sin_port));
return connt_fd;
}
#if 0
int client_connect_server(int connt_fd)
{
int ret_connect = connect(connt_fd,(struct sockaddr*)&server_addr,sizeof(server_addr));
if(-1 == ret_connect)
{
perror("connect");
return -1;
}
printf("connect to server(%s:%d) success.\n",inet_ntoa(server_addr),ntohs(server_addr.sin_port));
return ret_connect;
}
#endif