在linux下如何实现一个服务器端监听到客户端发送数据包(简单的实现方式就行)

瞌睡鱼 2009-02-06 08:43:05
希望那位大虾指点一下
...全文
259 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
waizqfor 2009-02-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chenqiang35 的回复:]
用select来探测

C/C++ code
1. 创建socket;

2. my_addr.sin_family = AF_INET; /*sin_family is unsigned short, host byte order*/
my_addr.sin_port = htons(SERVERPORT);/*unsigned short, network byte order*/
my_addr.sin_addr.s_addr = INADDR_ANY;//inet_addr(INADDR_ANY); /*auto-fill with my IP*/
bzero(&(my_addr.sin_zero), 8); /*zero the rest of the struct*/

3. bind;


[/Quote]
学习 !~`
csgdseed 2009-02-06
  • 打赏
  • 举报
回复
很详细了
chenqiang35 2009-02-06
  • 打赏
  • 举报
回复
用select来探测

1. 创建socket;

2. my_addr.sin_family = AF_INET; /*sin_family is unsigned short, host byte order*/
my_addr.sin_port = htons(SERVERPORT);/*unsigned short, network byte order*/
my_addr.sin_addr.s_addr = INADDR_ANY;//inet_addr(INADDR_ANY); /*auto-fill with my IP*/
bzero(&(my_addr.sin_zero), 8); /*zero the rest of the struct*/

3. bind;

4. listen;

5. /* 把集合清空 */(这个是重点,每一次while循环都应清空fd_set集合,再把相应的句柄加入fd_set)
FD_ZERO(&rfds);

/* 把标准输入句柄0加入到集合中 */
FD_SET(0, &rfds);
maxfd = 0;

/* 把sockfd句柄加入到集合中 */
FD_SET(sockfd, &rfds);
if(sockfd > maxfd)
maxfd = sockfd;

/*把clientfd加入到rfds集合中*/
for(j = 0; j < currentid; j++)
{
FD_SET(clientfd[j], &rfds);

if(clientfd[j] > maxfd)
{
maxfd = clientfd[j];
}
}

6. /* 开始等待 */
retval = select(maxfd + 1, &rfds, NULL, NULL, &tv);

7. for(j = 0; j < currentid; j++)//遍历每个已经客户端

8. if(FD_ISSET(sockfd, &rfds))//判断select探测的sockfd描述符是否发生变化,若是变化则,clientfd[currentid] = accept(sockfd, (struct sockaddr *)&clientaddr, &sin_size );

9. if(FD_ISSET(clientfd[j], &rfds))判断select探测的clientid描述符是否发生变化;

瞌睡鱼 2009-02-06
  • 打赏
  • 举报
回复
/*
** server.c -- a stream socket server demo
*/

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/wait.h>
#include <signal.h>

#define MYPORT 3490 // the port users will be connecting to

#define BACKLOG 10 // how many pending connections queue will hold

void sigchld_handler(int s)
{
while(wait(NULL) > 0);
}

int main(void)
{
int sockfd, new_fd; // listen on sock_fd, new connection on new_fd
struct sockaddr_in my_addr; // my address information
struct sockaddr_in their_addr; // connector's address information
int sin_size;
struct sigaction sa;
int yes=1;

if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(1);
}

if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) {
perror("setsockopt");
exit(1);
}

my_addr.sin_family = AF_INET; // host byte order
my_addr.sin_port = htons(MYPORT); // short, network byte order
my_addr.sin_addr.s_addr = INADDR_ANY; // automatically fill with my IP
memset(&(my_addr.sin_zero), '\0', 8); // zero the rest of the struct

if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) {
perror("bind");
exit(1);
}

if (listen(sockfd, BACKLOG) == -1) {
perror("listen");
exit(1);
}

sa.sa_handler = sigchld_handler; // reap all dead processes
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_RESTART;
if (sigaction(SIGCHLD, &sa, NULL) == -1) {
perror("sigaction");
exit(1);
}

while(1) { // main accept() loop
sin_size = sizeof(struct sockaddr_in);
if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) {
perror("accept");
continue;
}
printf("server: got connection from %s\n",inet_ntoa(their_addr.sin_addr));
if (!fork()) { // this is the child process
close(sockfd); // child doesn't need the listener
if (send(new_fd, "Hello, world!\n", 14, 0) == -1)
perror("send");
close(new_fd);
exit(0);
}
close(new_fd); // parent doesn't need this
}

return 0;
}

内容概要:本文详细探讨了机组组合优化模型的构建,旨在通过合理安排各类发电机组的启停计划和优化出力分配,实现电力系统在经济性和稳定性上的最佳平衡。文章首先介绍了电力系统的四大主要组件——传统火电机组、风电机组、光伏机组和储能系统的参数及运行特性。接着,围绕最小化系统总运行成本这一目标,设计了优化目标函数,并明确了包括功率平衡约束、机组出力上下限约束、风光发电功率约束、弃风弃光约束、爬坡速率约束、储能系统荷电状态约束、充放电功率约束和充放电互斥约束在内的多项约束条件。最后,文章列出了求解机组组合优化模型所需的关键变量,如传统机组的开停状态、机组出力、启停成本、风电光伏实际出力、弃风弃光比例及储能系统的充放电功率和荷电状态,以实现系统的经济调度和可再生能源的最大化利用。 适合人群:从事电力系统研究、规划和调度工作的工程师和技术人员,以及对电力系统优化感兴趣的科研人员。 使用场景及目标:①帮助电力系统工程师理解不同类型发电机组的特点及其对系统稳定性、经济性和环保性的影响;②为制定合理的电力系统调度策略提供理论依据和技术支持;③促进可再生能源的有效整合,提高电力系统的灵活性和可靠性。 其他说明:本文提供的模型和方法不仅适用于当前的电力系统,也可为未来含高比例可再生能源接入的电力系统提供参考。文中涉及的具体数学公式和参数设定为实际应用提供了详细的指导,有助于提升电力系统的运行效率和经济效益。

70,021

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧