俺分多,散分啦!(linux socket网络编程高手请进,分不够再加)

Kylix_XP 2003-03-24 04:29:48
小的正在写一个telnet server,有几个问题请教各位大侠:
1.当用户 telnet上远程服务器后,如何在服务器端编程实现:

(1)取得当前连接到telnet server上的用户数目,
(2)取得所有连接到telent server上的用户IP地址列表
(3)取得所有连接到telent server上的用户登录名
(4)断开用户连接

请用C语言实现.
...全文
29 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hawkeyes_yq 2003-03-25
  • 打赏
  • 举报
回复
up
  • 打赏
  • 举报
回复
up
用户 昵称 2003-03-25
  • 打赏
  • 举报
回复

The domain name queries carried out by gethostbyname() and
gethostbyaddr() use a combination of any or all of the
name server named(8), a broken out line from /etc/hosts,
and the Network Information Service (NIS or YP), depending
upon the contents of the order line in /etc/host.conf.
(See resolv+(8)). The default action is to query
named(8), followed by /etc/hosts.
得到对方的用户名称


close关闭连接描述符
用户 昵称 2003-03-25
  • 打赏
  • 举报
回复
小的正在写一个telnet server,有几个问题请教各位大侠:
1.当用户 telnet上远程服务器后,如何在服务器端编程实现:

(1)取得当前连接到telnet server上的用户数目,
(2)取得所有连接到telent server上的用户IP地址列表
(3)取得所有连接到telent server上的用户登录名
(4)断开用户连接

请用C语言实现.
==================================================================
首先你要确信,几十个用户的server端远比client端好写
我目前正在写一个管理系统,功控制台和telnet登陆管理使用。支持IPV6和ipv4两种协议,相关代码网上都有.

if( -1 == ( sockfd = socket( AF_INET6, SOCK_STREAM, 0 ) ) )
{
perror( "socket" );
return -1;
}
/* 服务器端填充 sockaddr结构 */
/*
* 创建监听套接字
*/
bzero( &serv_addr, sizeof( struct sockaddr_in6 ) );
serv_addr.sin6_family = AF_INET6;
serv_addr.sin6_addr = in6addr_any; /* 结构分配 */
serv_addr.sin6_port = htons( whichport );

/* 允许局部地址重用 */
sock_opt = 1;
if( -1 == setsockopt( sockfd,
SOL_SOCKET,
SO_REUSEADDR,
( void * )&sock_opt,
sizeof( sock_opt ) )
)
{
perror( "setsockopt( SO_REUSEADDR )" );
close( sockfd );
return -1;
}

/* 捆绑sockfd描述符 */
if( -1 == bind( sockfd,( struct sockaddr * )( &serv_addr ), sizeof( struct s
ockaddr_in6 ) ) )
{
perror( "bind" );
close( sockfd );
return -1;
}
/* 监听sockfd描述符 */
if( -1 == listen( sockfd, 1 ) )
{
perror( "listen" );
close( sockfd );
return -1;
}
pid = 0;
while( TRUE )
{
/* 服务器阻塞,直到客户程序建立连接 */
sin_size = sizeof( struct sockaddr_in6 );
if( -1 == ( new_fd = accept( sockfd, ( struct sockaddr * )( &cli_addr ),
&sin_size ) ) )
{
perror( "accept" );
return -1;
}
//IPV6应用层就这么简单,这里可以在accept之后判断连接数目,注意最好不要accept之前判断,因为accept已经被系统接受,accept后根据连接数目决定是否断开。

=============================================
已经知道了如何accept,当然就可以用inet_ntop来显示用户的ip地址了

+--------------------------------------------------+
| User connect from |
| 192.168.1.111 |
| 2700 |
IPV4连接

+--------------------------------------------------+
| User connect from |
| fe80::207:95ff:fec7:a769 |
| 1027 |
+--------------------------------------------------+
IPV6连接

if( IN6_IS_ADDR_V4MAPPED( &cli_addr.sin6_addr ) )// IPV4
判断哪种连接

if( start_type == 2 )
{
memcpy( &in6.sin6_addr, temp_ip, 16 );
sprintf( loginlogo, "%s", inet_ntop( AF_INET6,
(void *)&in6.sin6_addr,
addrbuf,
sizeof( addrbuf )
) );
}
else if( start_type == 1 )
{
memcpy( &in.s_addr, &temp_ip[ 12 ], 4 );
sprintf( loginlogo, "%s", inet_ntoa( in ) );
}
实现转化成ip地址字符串
wuliangxia 2003-03-25
  • 打赏
  • 举报
回复
敬佩,高手的感觉真让人向往!
bnwxf 2003-03-24
  • 打赏
  • 举报
回复
老猫不是已经回答了么?
我倒是觉得telnet服务器编程重点不在这里。而在于如何实现telnet的规范。
如果你连这些都写不出来,我建议你先找本[unix网络编程]看看。
kp_flysky 2003-03-24
  • 打赏
  • 举报
回复
这也太简单了
你是不愿意写还是写不出来
Kylix_XP 2003-03-24
  • 打赏
  • 举报
回复
真得没人能够回答?
imquestion 2003-03-24
  • 打赏
  • 举报
回复
你自己写server的话,这些还不好实现吗?
blh 2003-03-24
  • 打赏
  • 举报
回复
1.accpet调用可以知道客户端的ip地址
2。使用一个全局计数器,你没调用一次accept,计数器加一,当连接断开,计数器接一
3。那是你如何实现telnet协议的问题了,你需要记录每个用户的名字
4。/????
看看linux的telnet服务器源代码把
数据来源:中经数据库 主要指标110多个(全部都是纯粹的 市辖区 指标),大致是: GDP GDP增速 第一产业增加值占GDP比重 第二产业增加值占GDP比重 第三产业增加值占GDP比重 人均GDP 社会消费品零售总额 固定资产投资(不含农户) 新设外商投资企业数_外商直接投资 实际利用外资金额(美元) 一般公共预算收入 一般公共预算支出 一般公共预算支出_教育 一般公共预算支出_科学技术 金融机构人民币各项存款余额_个人储蓄存款 金融机构人民币各项存款余额 金融机构人民币各项贷款余额 规模以上工业企业单位数 规模以上工业企业单位数_内资企业 规模以上工业企业单位数_港澳台商投资企业 规模以上工业企业单位数_外商投资企业 规模以上工业总产值 规模以上工业总产值_内资企业 规模以上工业总产值_港澳台商投资企业 规模以上工业总产值_外商投资企业 规模以上工业企业流动资产合计 规模以上工业企业固定资产合计 规模以上工业企业利润总额 规模以上工业企业应交增值税 规模以上工业企业主营业务税金及附加 户籍人口数 年均户籍人口数 户籍人口自然增长率 第一产业就业人员占全部城镇单位就业人员比重 第二产业就业人员占全部城镇单位就业人员比重 第三产业就业人员占全部城镇单位就业人员比重 城镇非私营单位就业人员数 城镇非私营单位就业人员数_第一产业 城镇非私营单位就业人员数_第二产业 城镇非私营单位就业人员数_第三产业 城镇非私营单位就业人员数_农、林、牧、渔业 城镇非私营单位就业人员数_采矿业 城镇非私营单位就业人员数_制造业 城镇非私营单位就业人员数_电力、热力、燃气及水生产和供应业 城镇非私营单位就业人员数_建筑业 城镇非私营单位就业人员数_批发和零售业 城镇非私营单位就业人员数_交通运输、仓储和邮政业 城镇非私营单位就业人员数_住宿和餐饮业 城镇非私营单位就业人员数_信息传输、软件和信息技术服务业 城镇非私营单位就业人员数_金融业 城镇非私营单位就业人员数_房地产业 城镇非私营单位就业人员数_租赁和商务服务业 城镇非私营单位就业人员数_科学研究和技术服务业 城镇非私营单位就业人员数_水利、环境和公共设施管理业 城镇非私营单位就业人员数_居民服务、修理和其他服务业 城镇非私营单位就业人员数_教育 城镇非私营单位就业人员数_卫生和社会工作 城镇非私营单位就业人员数_文化、体育和娱乐业 城镇非私营单位就业人员数_公共管理、社会保障和社会组织 城镇非私营单位在岗职工平均人数 城镇就业人员数_私营企业和个体 城镇非私营单位在岗职工工资总额 城镇非私营单位在岗职工平均工资 城镇登记失业人员数 建成区面积 建设用地面积 建设用地面积_居住用地 液化石油气供气总量 液化石油气供气总量_居民家庭 人工煤气、天然气供气总量 人工煤气、天然气供气总量_居民家庭 液化石油气用气人口 人工煤气、天然气用气人口 城市公共汽电车运营车辆数 城市出租汽车运营车辆数 城市公共汽电车客运总量 道路面积 排水管道长度 建成区绿化覆盖面积 建成区绿化覆盖率 绿地面积 公园绿地面积 维护建设资金支出 土地面积 生活用水供水量 供水总量 全社会用电量 城乡居民生活用电量 工业生产用电量 房地产开发投资 房地产开发投资_住宅 限额以上批发和零售业法人单位数 限额以上批发和零售业商品销售总额 普通中学学校数 中等职业教育学校数 普通小学学校数 普通高等学校专任教师数 普通中学专任教师数 中等职业教育专任教师数 普通小学专任教师数 普通高等学校在校生数 普通中学在校生数 中等职业教育在校生数 普通小学在校生数 电视节目综合人口覆盖率 公共图书馆总藏量_图书 医疗卫生机构数_医院和卫生院 卫生人员数_执业(助理)医师 医疗卫生机构床位数_医院和卫生院 城镇职工基本养老保险参保人数 职工基本医疗保险参保人数 失业保险参保人数

23,114

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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