你的两个调用方式最后一个参数,意义完全不同,addrlen是将addrlen的地址传给accept(是一个可以写的变量地址)
眉山ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!
而你的后一个,是将sizeof(addr)它是一个常量,一般为4,转为指针传给accept,这个地址是不可写的
用Socket之前,一定要先用WSAStartup初始化。
连线是两个终端的事情,所以你需要写一个服务器和一个客服端
服务器:
WSAStartup
socket 创建套接字
bind 绑定端口
listen 侦听端口,等待客户端连接请求。这是程序会在这里等着,直到客户端调用connect
accept 接受连接
recv/send 收发数据
客户端:
WSAStartup
socket
connect
recv/send
具体看这个
端口就是负责监听连接请求的.如果监听到该端口的请求那么就可以确定是对你这个服务器的请求.一旦这个端口被占用,那么其它任何程序都无法再使用这个端口.所以我们要避开系统常用端口,要从1024以上的端口选择.
在服务器端
sin_port
是不可以被设置为0的,
否则客户端的确无法连接.
而客户端可以设置为0,客户端可以任意端口的,没有影响.
char
buff2[1024*10];
int
receiveLen;
/*调用accept函数,等待客户端的连接*/
client_fd=accept(sockfd,(struct
sockaddr
*)client_sockaddr,sin_size
/*调用recv函数接收客户端的请求*/
recvbytes=recv(client_fd,buf,BUFFER_SIZE,0)
typedef
int
(WINAPI
ICEPUB_TCPSENDANDRECEIVETEXT)(char
*sendBuff,
int
sendBuffLen,char
*recvBuff,int
recvMaxLen,char*
serverIP,int
serverPort);
ICEPUB_TCPSENDANDRECEIVETEXT
*icePub_tcpSendAndReceiveText
=
0;
HINSTANCE
hDLLDrv
=
LoadLibrary
("icePubDll.dll");
if(hDLLDrv)
{
icePub_tcpSendAndReceiveText=(ICEPUB_TCPSENDANDRECEIVETEXT
*)
GetProcAddress
(hDLLDrv,"icePub_tcpSendAndReceiveText");
}
if(icePub_tcpSendAndReceiveText)
receiveLen=icePub_tcpSendAndReceiveText(buf,recvbytes),buff2,1024*10,"192.168.1.2",8000);
if(hDLLDrv)
FreeLibrary(hDLLDrv);
AfxMessageBox
(buff2);
默认阻塞式
没有连接请求时,accept()以阻塞方式进入等待状态,直到有一个请求到达为止