|
|
我写了socket服务端以及客户端程序,因是demo,一切errorcheck都省了!
- /*
- ** srvdemo.c - a stream socket server demo
- */
- #include <stdio.h>
- #include <string.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <arpa/inet.h>
- #define PORT 1234
- #define BACKLOG 10
- int main(void)
- {
- int sockfd, new_fd;
- struct sockaddr_in my_addr;
- struct sockaddr_in their_addr;
- int sin_size;
- char buf[15];
- sockfd = socket(AF_INET, SOCK_STREAM, 0);
- my_addr.sin_family = AF_INET;
- my_addr.sin_port = htons(PORT);
- my_addr.sin_addr.s_addr = INADDR_ANY;
- memset(&(my_addr.sin_zero), '\0', 8);
- bind(sockfd, (struct sockaddr *)&my_addr,
- sizeof(struct sockaddr));
- listen(sockfd, BACKLOG);
- while(1)
- {
- sin_size = sizeof(struct sockaddr_in);
-
- new_fd = accept(sockfd, (struct sockaddr *)&their_addr,
- &sin_size);
- printf("server: got connection from %s\n",
- inet_ntoa(their_addr.sin_addr));
- recv(new_fd, buf, 11, 0);
- printf("server: %s\n", buf);
- }
- return 0;
- }
复制代码
这应该是一个典型的socket服务端程序。
下面是客户端demo。
- /*
- ** clientdemo.c - a stream socket client demo
- */
- #include <stdio.h>
- #include <unistd.h>
- #include <string.h>
- #include <netdb.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #define PORT 1234
- #define MAXDATASIZE 100
- int main(int argc, char *argv[])
- {
- int sockfd, numbytes;
- char buf[MAXDATASIZE];
- struct hostent *he;
- struct sockaddr_in their_addr;
- he = gethostbyname(argv[1]);
- sockfd = socket(AF_INET, SOCK_STREAM, 0);
- their_addr.sin_family = AF_INET;
- their_addr.sin_port = htons(PORT);
- their_addr.sin_addr = *((struct in_addr *)he->h_addr);
- memset(&(their_addr.sin_zero), '\0', 8);
- connect(sockfd, (struct sockaddr *)&their_addr,
- sizeof(struct sockaddr));
- sprintf(buf, "Hello,World");
- send(sockfd, buf, 11, 0);
- send(sockfd, buf, 5, 0);
- close(sockfd);
- return 0;
- }
复制代码
编译测试如下:
gcc -Wall srvdemo.c -o srvdemo
gcc -Wall clientdemo.c -o clientdemo
在一个终端输入启动srvdemo。在另一个终端运行客户端clientdemo localhost,结果如下
server: got connection from 127.0.0.1
server: Hello,World
我的问题是:我在客户端连续发送了两次数据,为什么服务端却只接收了一次呢?
如果我要服务端连续两次都接收到,要怎么样做? |
|