当前位置:  技术问答>linux和unix

高分请大家来谈谈socket API,来者有分

    来源: 互联网  发布时间:2015-05-16

    本文导语:  请大家谈谈现在socket API的缺点,对它有什么看法,有什么改进方法。大家可从各个角度谈谈,想说什么就说什么!谢谢大家的参与!!! | QoS是全网的概念,这里的QSocket是对本机的网络流量...

请大家谈谈现在socket API的缺点,对它有什么看法,有什么改进方法。大家可从各个角度谈谈,想说什么就说什么!谢谢大家的参与!!!

|
QoS是全网的概念,这里的QSocket是对本机的网络流量进行分类、调度,只是一个操作系统API接口,类似现在的setsockopt要做的事情。但如果网络设备不提供QoS能力,应用对带宽、时延、抖动、拥塞等指标的要求仍然无法满足。而且,从网络管理的角度讲,由应用指定报文的优先级是不能接受的。所以QSocket能实现的只是本机所有的网络带宽等资源在本机应用之间的分配,不能真正满足应用的需求。

|
up

|
在Unix系统中的socket api是最早由berkeley大学开发,同BSD Unix一同发行的,所以后来就称为bsd行为的socket.它的出现改变了世界:-).诞生了网络。
    随之而来的就是软件开发商的模仿,如后来的win32 socket。1.1及以前的版本都被称为bsd socket。从2.0开始改变了这个bsd行为,但基本模式还是以bsd行为为基础。在功能上表面上看好像是增强了,其实本质上只是更适合于以消息驱动方式开发网络程序而已。它能实现的功能,bsd套接字都能实现,包括异步(以消息驱动)方式通信。从我个人观点认为,对于开发任何规模的网络程序,bsd socket是最好的选择,它的通信模式给人非常爽和利索的感觉,就像喜欢C语言的简洁一样。到现在为止,unix系统上,windows上的多数的主要网络开发还是由bsd socket来完成。而人们没有再开发什么网络API.这从侧面证明了,bsd socket的完美性。

    有时间去写网络api,还不如踏踏实实做点事情,不要好高鹜远

|
呵呵,学习中,俺只是写过简单的多线程并发服务器的程序.
只是用到了基本的API,对于select这样的东东都没有用过.
感觉好像有点复杂.
尤其感觉对于UDP的应用开发,似乎要很有经验才能写好.
不知道有没有可能某些高手在socket之再封装一些更好用的针对具体服务的接口呢

|
你要重写socket API?
我感觉在写socket程序时有关ipv4和ipv6的处理很麻烦,如果老兄能把相关处理都封装
起来作一套透明支持ipv4和ipv6的API,肯定叫座!

|
使用起来比较复杂,好多地方都和系统精密相关,新手入门不易,
兄弟如果有想法,不如用c++把他们的封装成像windows sock那样的 类
这样的话,入门更容易了,如果能作得足够精壮,可要提高好多人的工作效率哦,
至于其他,水平有限,没什么高见!

|
/*
 * bsocket.h - declarations/definitions for BSD socket operation
 * 
 * Gang He - dchg2000@mail.com .
 */

#ifndef _HEGANG_BSOCKET_H_
#define _HEGANG_BSOCKET_H_

#include 
#include 

/*
 * Redefine custom data type
 */
typedef int SOCKET;

typedef unsigned short PORT;


/*
 * Define compatible macro  
 */
#define INVALID_SOCKET 0

#define SOCKET_RECV_TIMEOUT -2


/*
 * Create socket
 */
SOCKET create_bsocket(int domain, int type, int protocol);


/*
 * Listen socket
 */
int listen_bsocket(SOCKET sock, PORT port);


/*
 * Accept socket
 */
SOCKET accept_bsocket(SOCKET sock, char* ip_addr);


/*
 * Connect socket
 */
int connect_bsocket(SOCKET sock, char* ip, PORT port);


/*
 * Receive data from socket
 */
int recv_bsocket(SOCKET sock, void* pbuf, size_t bufsize, int timeout);


/*
 * Send data to socket
 */
int send_bsocket(SOCKET sock, const void* pbuf, size_t bufsize);


/*
 * Close socket
 */
void close_bsocket(SOCKET *sock);



#endif

|
/* bsocket.c */

#include 
#include 
#include 
#include 
#include "bsocket.h"


SOCKET create_bsocket(int domain, int type, int protocol)
{
  return socket(domain, type, protocol);
}


int listen_bsocket(SOCKET sock, PORT port)
{
  char hostname[64];
  struct hostent *hp;
  struct sockaddr_in local;
  int optval;

  gethostname(hostname, sizeof(hostname));
  if ( (hp = gethostbyname((char*)hostname)) == NULL )
    return -1;

  bcopy(hp->h_addr, &local.sin_addr, hp->h_length);
  local.sin_port = htons(port);

  optval = 1;

  if ( setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) == -1 )
    return -1;

  if ( bind(sock, (struct sockaddr*)&local, sizeof(local)) == -1 )
    return -1;
   
  return listen(sock, 1);
}


SOCKET accept_bsocket(SOCKET sock, char* ip_addr)
{
  SOCKET new_sock;
  struct sockaddr_in from_addr;
  int addr_len = sizeof(from_addr);

  new_sock = accept(sock, (struct sockaddr*)&from_addr, &addr_len);
  if ( new_sock > 0 ) {

    sprintf(ip_addr, "%s", inet_ntoa(from_addr.sin_addr));
  }

  return new_sock;
}


int connect_bsocket(SOCKET sock, char* ip, PORT port)
{
  struct sockaddr_in srvaddr;

  bzero(&srvaddr, sizeof(srvaddr));
  srvaddr.sin_family = AF_INET;
  srvaddr.sin_addr.s_addr = inet_addr(ip);
  srvaddr.sin_port = htons(port);

  return connect(sock, (struct sockaddr*)&srvaddr, sizeof(srvaddr));
}


int send_bsocket(SOCKET sock, const void* pbuf, size_t bufsize)
{
  int s_byte, b_count;

  b_count = 0;

  while ( b_count  0 )
    tv.tv_sec = timeout;

  while ( byte_rcv 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 谁参加过weblogic的证书考试,是否有经验可供参考?高分高分高高分
  • 哪里有JB6下载啊,高分相送,救命
  • 高分求救!我在uclinux上运行应用程序时出现内存分配错误,不知如何解决,解决者高分!!
  • 哪里去找中文的EJB文章?高分悬赏!
  • 有jsp的upload和download 代码么,高分相报!
  • (高分求助)请问,那里有软件开发的<设计文档>
  • 高分寻求jsp代码(网上调查系统,新闻发布系统)就这点分了
  • 高分求购做饼图、线形图的源吗?
  • 关于linu下的中文输入.(高分:300)
  • 一个简单的问题,高分求助!!!
  • 高分求购jbulider6得注册码,企业版本,个人版本都要
  • Linux远程访问的问题,高分求教:)
  • 请问哪儿有Solaris8的光盘映像文件下载???高分相赠!!!
  • 高分求“Ration Rose”&"JBuilder6.0"&"VisualCafe"
  • VJ的一个问题,高分求助,熟悉VJ得请进!
  • 高分求购:linux和unix命令大全电子文档
  • 急救:关于BLOB数据类型---在线等待,高分相送!
  • 求UNIXWARE7.11的原版下载,高分相赠,在线等待!!!
  • 关于java?高分相送!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3