关闭

对pbsocket认识

1282人阅读 评论(0) 收藏 举报
global variables
WinSock   ws
event:open
ws = create WinSock    //提供常数和函数winsock_error
event:close
destroy ws

sServer = create SocketStream         //数据流传输模式:自动创建套接字
 sServer.bind(ulAddr,iPort)
sServer.listen(5)

tmpSocketNum = sServer.Accept(ulClientAddr, iClientPort) 自动创建一个套接字节

nsServer = create Socket           //这就用socket就行
nsServer.initsocket(SocketNum)     //初始化accept建立的socket

nsServer.CloseSocket()   这句是错误的,因为destroy时就自动调用了它
destroy nsServer
sServer.CloseSocket()    这句是错误的,因为destroy时就自动调用了它
destroy sServer

integer iEvent, iRet
iEvent = ws.FD_READ + ws.FD_WRITE + ws.FD_CLOSE + ws.FD_OOB+FD_ACCEPT+FD_CONNECT
sServer.WSAAsyncSelect(handle(this), 1024, iEvent) //事件邦定

ws.winsock_error
有用的函数:
ws.gethostname() 获得当前计算机名称
ws.gethostbyname() 根据名称返回其它信息
ws.GetHostByAddr()
h_name h_aliases[]
h_addrtype
h_length
h_addr-list[]

iEvent = ws.WSAGetSelectEvent(lparam)   判断是哪一个事件
iRet = ws.WSAGetSelectError(lparam)    
iErr = ws.WSAGetLastError()

sClient = create socketstream
sClient.WsConnect(iHostent.h_addr_list[1], iPort)
不用指定自身的端口,会自动使用一个端口的并告知服务器
sClient.Recv
sClient.send
destroy sClient

recv 只要产生fd_read事件就可以用recv来接收数据,注意用循坏来读取所有数据
send 注意可以直接使用send 或通过fd_write事件来发送数据若想通事件来发送
数据必须在准备好数据时调用wsaasyncselect这样马上会触发fd_write事件
fd_write只有在绶冲区中有空位时只产生,刚建立连接时会产生一次
wsaasyncselect只有最后一次的有用,先前的无效
 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:229755次
    • 积分:3891
    • 等级:
    • 排名:第8414名
    • 原创:137篇
    • 转载:21篇
    • 译文:9篇
    • 评论:9条
    最新评论