/****************************************
* 文件名: client.c
* 作者: laoyao
* 修改时间: 2016-4-10
* 文件说明: 网络TCP通讯客户机端
****************************************/
/*头文件*/
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <strings.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
/*宏定义*/
#define SERVER_PORT 3333 //服务器端口号
int main(int argc, char **argv)
{
/*参数检查*/
if (argc != 2)
{
fprintf(stderr, "Usage:\n\t./client <ip address>\n");
return -1;
}
/*创建标识(描述符)*/
int client_fd;
client_fd = socket(AF_INET, SOCK_STREAM, 0); //创建套接字
/*绑定地址*/
struct sockaddr_in server_addr; //服务器IPV4数据结构
server_addr.sin_family = AF_INET; //设置协议(TCP/IP协议)
server_addr.sin_port = htons(SERVER_PORT); //转换并设置端口
server_addr.sin_addr.s_addr = inet_addr(argv[1]); //设置地址(指定)
bzero(server_addr.sin_zero, 8); //server_addr.sin_zero清零
/*连接请求*/
int connect_flag;
connect_flag = connect(client_fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr));
if (connect_flag == -1)
{
perror("connect");
exit(1);
}
/*输入数据*/
char buffer[1024];
printf("client send to %s:\n", argv[1]);
fgets(buffer, sizeof(buffer), stdin);
/*发送数据*/
int send_flag;
send_flag = send(client_fd, buffer, sizeof(buffer), 0);
if (send_flag == -1)
{
perror("send");
exit(1);
}
/*关闭连接*/
close(client_fd);
return 0;
}
/****************************************
* 文件名: editor.c
* 作者: laoyao
* 修改时间: 2016-4-10
* 文件说明: 网络TCP通讯服务器端
****************************************/
/*头文件*/
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <strings.h>
#include <stdio.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <unistd.h>
/*宏定义*/
#define SERVER_PORT 3333 //服务器端口号
int main()
{
/*创建标识(描述符)*/
int server_fd;
server_fd = socket(AF_INET, SOCK_STREAM, 0); //创建套接字
if (server_fd == -1)
{
perror("socket");
exit(1);
}
printf("Socket id = %d\n", server_fd);
/*绑定地址和端口*/
struct sockaddr_in server_addr; //服务器IPV4数据结构
server_addr.sin_family = AF_INET; //设置协议(TCP/IP协议)
server_addr.sin_port = htons(SERVER_PORT); //转换并设置端口(网络字节序)
server_addr.sin_addr.s_addr = htonl(INADDR_ANY); //设置地址(任意)
bzero(server_addr.sin_zero, 8); //serverAddr.sin_zero清零
/*配置套接字*/
int bind_flag;
bind_flag = bind(server_fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr));
if (bind_flag == -1)
{
perror("bind");
exit(1);
}
printf("Bind success!\n");
/*监听请求*/
int listen_flag;
listen_flag = listen_flag =listen(server_fd, 1); //设置最大请求数为1
if (listen_flag == -1)
{
perror("listen");
exit(1);
}
printf("Listening...\n");
/*接收请求*/
socklen_t client_addr_len; //客户端sockaddr大小
struct sockaddr_in client_addr; //客户端IPV4数据结构
int client_fd;
client_addr_len = sizeof(struct sockaddr);
client_fd = accept(server_fd, (struct sockaddr *)&client_addr, &client_addr_len);
if (client_fd == -1)
{
perror("accept");
exit(1);
}
/*接收数据*/
char buffer;
unsigned int count;
count = recv(client_fd, &buffer, sizeof(buffer), 0);
if (count == -1)
{
perror("recv");
exit(1);
}
switch (buffer)
{
case '0':
system("./motor_app 0");
break;
case '1':
system("./motor_app 1");
break;
case '2':
system("./motor_app 2");
break;
case '3':
system("./motor_app 3");
break;
default:
printf("error");
}
//printf("Receivea a message: %s", buffer);
/*关闭套接字*/
close(client_fd);
close(server_fd);
return 0;
}