本文目录一览:
c语言socket编程中accept的阻塞问题
端口就是负责监听连接请求的.如果监听到该端口的请求那么就可以确定是对你这个服务器的请求.一旦这个端口被占用,那么其它任何程序都无法再使用这个端口.所以我们要避开系统常用端口,要从1024以上的端口选择.
在服务器端
sin_port
是不可以被设置为0的,
否则客户端的确无法连接.
而客户端可以设置为0,客户端可以任意端口的,没有影响.
c语言的返回值是什么意思啊?
函数返回值的意思是将函数实现的结果返回给调用者。
按标准来说,C的main函数是需要有返回值的。标准中main函数返回类型是int的,所以需要一个返回值。但是由于历史原因,很多地方可以看到没有返回值的main。
比如直接main()或者说void main() 但是这样一般编译器也不会认为错误,不过建议还是写标准的C的main函数,最好有一个返回值,0表示正常退出。
扩展资料:
需要说明的是:
1、一个C语言源程序可以由一个或多个源文件组成。
2、每个源文件可由一个或多个函数组成。
3、一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。是整个程序的入口。
4、源程序中可以有预处理命令(包括include 命令,ifdef、ifndef命令、define命令),预处理命令通常应放在源文件或源程序的最前面。
5、每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。(结构体、联合体、枚举型的声明的“}”后要加“ ;”。)
6、标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。
参考资料来源:百度百科-函数
谁能告诉我accept()函数返回一个新的套接字,所谓新套接字怎么理解?
谁能告诉我accept()函数返回一个新的套接字,所谓新套接字就是说这个是新产生的套接字,并不是你用来accept的那个监听的套接字。
accept()函数用于一个套接口接受一个连接。accept()是c语言中网络编程的重要的函数,windows系统在#includewinsock.h ,而linux系统在#include sys/socket.h中。
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
参数
sockfd:套接口描述字,该套接口在listen()后监听连接。
addr:(可选)指针,指向一缓冲区,其中接收为通讯层所知的连接实体的地址。Addr参数的实际格式由套接口创建时所产生的地址族确定。
addrlen:(可选)指针,输入参数,配合addr一起使用,指向存有addr地址长度的整型数。
实例:
#ifndef UNICODE
#defineUNICODE
#endif
#include winsock2.h
#include stdio.h
#include windows.h
#pragmacomment(lib,"Ws2_32.lib")
int wmain(void)
{
WSADATAwsaData ;
intiResult=WSAStartup(MAKEWORD(2,2),wsaData);
if(iResult!=NO_ERROR)
{
wprintf(L "WSAStartupfailedwitherror:%ld\n",iResult);
return 1 ;
}
SOCKETListenSocket ;
ListenSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(ListenSocket==INVALID_SOCKET)
{
wprintf(L "socketfailedwitherror:%ld\n",WSAGetLastError());
WSACleanup();
return 1 ;
}
sockaddr_inservice ;
service.sin_family=AF_INET ;
service.sin_addr.s_addr=inet_addr("127.0.0.1");
service.sin_port=htons(27015);
if(bind(ListenSocket,
(SOCKADDR*)service,sizeof(service))==SOCKET_ERROR)
{
wprintf(L"bindfailedwitherror:%ld\n",WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1 ;
}
if(listen(ListenSocket,1)==SOCKET_ERROR)
{
wprintf(L"listenfailedwitherror:%ld\n",WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1 ;
}
SOCKETAcceptSocket ;
wprintf(L "Waitingforclienttoconnect...\n");
AcceptSocket=accept(ListenSocket,NULL,NULL);
if(AcceptSocket==INVALID_SOCKET)
{
wprintf(L "accept failed with error:%ld\n",WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1 ;
}
else
wprintf(L "Clientconnected.\n");
//Nolongerneedserversocket
closesocket(ListenSocket);
WSACleanup();
return 0 ;
}