📄 socket_client.c
字号:
#include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
/* exec_command()负责在与服务器连接成功后,处理传送过来的指令。 */
void exec_command(int sockfd)
{
char buf[256]; /* 用于处理输入的缓冲区 */
FILE *tty = NULL; /* 用户终端 */
int n;
int i;
/* 打开用户终端。这果没有使用标准输入输出,因为在重定向时,标准输入输出不会指向用户终端,
* 用户输入带来困难。
*/
tty = fopen("/dev/tty", "r");
if (tty == NULL) {
perror("can't open /dev/tty.");
exit(1);
}
while(1) {
if (fgets(buf, BUFSIZ, tty) == NULL || buf[0] == 'q')
exit(0);
else /* 接受用户输入后,传递到server. */
write(sockfd, buf, sizeof(buf));
for(i = 0; i < 256; i++) buf[i] = 0; /* 清空缓冲区 */
if((n = read(sockfd, buf, sizeof(buf))) > 0) {
fputs(buf, stdout);
fflush(stdout);
}
}
}
int main()
{
int sockfd; /* 套接字描述符 */
struct sockaddr_in address; /* Internet 套接字地址结构 */
int result; /* 与server连接的结果 */
sockfd = socket(AF_INET, SOCK_STREAM, 0);
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr("127.0.0.1");
address.sin_port = htons(19734);
result =
connect(sockfd, (struct sockaddr *) &address, sizeof(address));
if (result == -1) {
perror("connect to server failed.");
exit(0);
}
exec_command(sockfd); /* 处理通信的内容 */
close(sockfd);
exit(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -