简单的TCP 流式socket 服务器和客户端代码示例
来源:互联网 发布:黄晓明 杨过 知乎 编辑:程序博客网 时间:2024/05/16 02:04
电子书在这里,见6.8.1 和6.8.2 章节,书中的代码有很多错误,包括#include、socket 描述符赋值等,正确的代码在这里
Server 代码:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <arpa/inet.h>
#include <unistd.h>
#define MYPORT 4000
#define BACKLOG 10
int main(int argc, char* argv[])
{
int sock_fd, new_fd ;
struct sockaddr_in my_addr;
struct sockaddr_in peer_addr;
int sin_size;
if((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket");
exit(1);
}
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MYPORT);
my_addr.sin_addr.s_addr = INADDR_ANY;// 使用INADDR_ANY,则会监听本地所有IP,包括lo, eth0, eth1, eth0:0……
// my_addr.sin_addr.s_addr = inet_addr("127.0.0.1");// 这样做可以只指定的IP,如127.0.0.1
bzero(&(my_addr.sin_zero), sizeof(my_addr.sin_zero));
if (bind(sock_fd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)
{
perror("bind");
exit(1);
}
if (listen(sock_fd, BACKLOG) == -1)
{
perror("listen");
exit(1);
}
while(1)
{
sin_size = sizeof(struct sockaddr_in);
if ((new_fd = accept(sock_fd, (struct sockaddr *)&peer_addr, (socklen_t*)&sin_size)) == -1)
{
perror("accept");
continue;
}
printf("server: got connection from %s\n", inet_ntoa(peer_addr.sin_addr));
if (!fork())
{
if (send(new_fd, "Hello, world!\n" , 14, 0) == -1)
{
perror("send");
close(new_fd);
exit(0);
}
close(new_fd);
}
}
while(waitpid(-1,NULL,WNOHANG) > 0);
return 0;
}
Client 代码:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <unistd.h>
#define PORT 4000
#define MAXDATASIZE 100
int main(int argc, char *argv[])
{
int sockfd, numbytes;
char buf[MAXDATASIZE];
struct hostent *he;
struct sockaddr_in their_addr;
if (argc != 2)
{
fprintf(stderr,"usage: client hostname\n");
exit(1);
}
if ((he=gethostbyname(argv[1])) == NULL)
{
herror("gethostbyname");
exit(1);
}
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket");
exit(1);
}
their_addr.sin_family = AF_INET;
their_addr.sin_port = htons(PORT);
their_addr.sin_addr = *((struct in_addr *)he->h_addr);
bzero(&(their_addr.sin_zero), 8);
if(connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1)
{
perror("connect");
exit(1);
}
if((numbytes=recv(sockfd, buf, MAXDATASIZE, 0)) == -1)
{
perror("recv");
exit(1);
}
buf[numbytes] = '\0';
printf("Received: %s",buf);
close(sockfd);
return 0;
}
- 简单的TCP 流式socket 服务器和客户端代码示例
- 最简单的Windows Socket代码,包括服务器和客户端
- 简单的TCP服务器和客户端
- 一个简单的TCP服务器与客户端示例
- python简单的socket 服务器和客户端
- 简单的python socket服务器和客户端
- [Unity]简单的socket客户端和服务器
- python socket实现简单的(TCP/UDP)服务器/客户端
- 简单的TCP协议 socket编程(C语言版服务器和客户端)
- 简单的TCP协议 socket编程(C语言版服务器和客户端)
- socket通信 简单的客户端和服务器的通信 服务器的代码
- python socket简单tcp服务器客户端
- TCP SOCKET服务器|客户端简单实现
- socket编程:简单TCP服务器/客户端编程
- 一个简单的基于node.js的TCP服务器和基于C++的TCP客户端通信示例程序
- java 通过 socket 实现 服务器和客户端的通信 TCP
- go简易tcp socket客户端和服务器
- python socket 创建tcp服务器和客户端
- JQuery插件的开发真的有那么难吗
- BlackBerry 9850应用推荐
- Android基础 《密西西比河谷州立大学:Android应用程序开发》(一)
- 智力题总结
- Tomcat6.X根目录root配置
- 简单的TCP 流式socket 服务器和客户端代码示例
- android SystemClock设置系统时间需要system权限
- poll调用深入解析
- 伤感语录:浅唱,没人懂的悲伤
- 如何实现类的成员函数作为回调函数
- 链表的相交与环存在问题
- 字库转位图--
- (个人原创)关于虚拟机安装gitserver
- JAVA程序员成长之路(必读书籍推荐)