Unix Sockets 简明教程
Unix Socket - Client Examples
为了使进程成为 TCP 客户端,您需要按照以下步骤操作:
To make a process a TCP client, you need to follow the steps given below &minus ;
-
Create a socket with the socket() system call.
-
Connect the socket to the address of the server using the connect() system call.
-
Send and receive data. There are a number of ways to do this, but the simplest way is to use the read() and write() system calls.
现在我们将这些步骤放在源代码的形式中。将此代码添加到文件 client.c 中,并使用 gcc 编译器进行编译。
Now let us put these steps in the form of source code. Put this code into the file client.c and compile it with gcc compiler.
运行此程序并传递服务器的主机名和端口号,以连接到服务器,您必须已在另一个 Unix 窗口中运行服务器。
Run this program and pass hostname and port number of the server, to connect to the server, which you already must have run in another Unix window.
#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
#include <netinet/in.h>
#include <string.h>
int main(int argc, char *argv[]) {
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;
char buffer[256];
if (argc < 3) {
fprintf(stderr,"usage %s hostname port\n", argv[0]);
exit(0);
}
portno = atoi(argv[2]);
/* Create a socket point */
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("ERROR opening socket");
exit(1);
}
server = gethostbyname(argv[1]);
if (server == NULL) {
fprintf(stderr,"ERROR, no such host\n");
exit(0);
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length);
serv_addr.sin_port = htons(portno);
/* Now connect to the server */
if (connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) {
perror("ERROR connecting");
exit(1);
}
/* Now ask for a message from the user, this message
* will be read by server
*/
printf("Please enter the message: ");
bzero(buffer,256);
fgets(buffer,255,stdin);
/* Send message to the server */
n = write(sockfd, buffer, strlen(buffer));
if (n < 0) {
perror("ERROR writing to socket");
exit(1);
}
/* Now read server response */
bzero(buffer,256);
n = read(sockfd, buffer, 255);
if (n < 0) {
perror("ERROR reading from socket");
exit(1);
}
printf("%s\n",buffer);
return 0;
}