show me your code:
服务器端:
- #include
- #include
- #include
- #include
- #include
- #include
-
- #define SERV_TCP_PORT 8000 /* server's port number */
- #define MAX_SIZE 80
-
- int main(int argc, char *argv[])
- {
- int sockfd, newsockfd, clilen;
- struct sockaddr_in cli_addr, serv_addr;
- int port;
- char string[MAX_SIZE];
- int len;
-
- /* command line: server [port_number] */
-
- if(argc == 2)
- sscanf(argv[1], "%d", &port); /* read the port number if provided */
- else
- port = SERV_TCP_PORT;
-
- /* open a TCP socket (an Internet stream socket) */
- if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
- perror("can't open stream socket");
- exit(1);
- }
-
- /* bind the local address, so that the cliend can send to server */
- bzero((char *) &serv_addr, sizeof(serv_addr));
- serv_addr.sin_family = AF_INET;
- serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); /* 或者使用INADDR_LOOPBACK都可以 */
- serv_addr.sin_port = htons(port);
-
- if(bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
- perror("can't bind local address");
- exit(1);
- }
-
- /* listen to the socket */
- listen(sockfd, 5);
-
- for(;;) {
-
- /* wait for a connection from a client; this is an iterative server */
- clilen = sizeof(cli_addr);
- newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
-
- if(newsockfd < 0) {
- perror("can't bind local address");
- }
-
- /* read a message from the client */
- len = read(newsockfd, string, MAX_SIZE);
- /* make sure it's a proper string */
- string[len] = 0;
- printf("%s\n", string);
-
- close(newsockfd);
- }
- }
-
-
客户端:
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
-
- #define SERV_TCP_PORT 8000 /* server's port */
-
- int main(int argc, char *argv[])
- {
- int sockfd;
- struct sockaddr_in serv_addr;
- char *serv_host = "localhost";
- struct hostent *host_ptr;
- int port;
- int buff_size = 0;
-
- /* command line: client [host [port]]*/
- if(argc >= 2)
- serv_host = argv[1]; /* read the host if provided */
- if(argc == 3)
- sscanf(argv[2], "%d", &port); /* read the port if provided */
- else
- port = SERV_TCP_PORT;
-
- /* get the address of the host */
- if((host_ptr = gethostbyname(serv_host)) == NULL) {
- perror("gethostbyname error");
- exit(1);
- }
-
- if(host_ptr->h_addrtype != AF_INET) {
- perror("unknown address type");
- exit(1);
- }
-
- bzero((char *) &serv_addr, sizeof(serv_addr));
- serv_addr.sin_family = AF_INET;
- serv_addr.sin_addr.s_addr =
- ((struct in_addr *)host_ptr->h_addr_list[0])->s_addr;
- serv_addr.sin_port = htons(port);
-
-
- /* open a TCP socket */
- if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
- perror("can't open stream socket");
- exit(1);
- }
-
- /* connect to the server */
- if(connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
- perror("can't connect to server");
- exit(1);
- }
-
- /* write a message to the server */
- write(sockfd, "hello world", sizeof("hello world"));
-
- close(sockfd);
- }
-
-
Makefile
- all: server client
-
- server: server.o
- gcc -o server server.o
-
- server.o: server.c
- gcc -c server.c
-
- client: client.o
- gcc -o client client.o -lnsl
-
- client.o: client.c
- gcc -c client.c