C++SOCKET面试题附答案

1.Winsock(套接字)接口主要有几种类型:
2.TCP/IP数据使用了大端模式还是小端模式:
3.请写出从主机字节转顺序转换为网络字节顺序的API:
4.请写出从网络字节顺序转换到主机字节顺序的API:
5.请写出inet_ntoa和inet_addr函数的作用是什么:
6.请写出sockaddr_in结构属性的含义:
7.请写出in_addr结构的属性含义:
8.请写出WSAStartup()函数的作用与参数含义:
9.WSACleanup()函数的作用是什么
10.socket()函数的作用是什么:
11.closeSock()函数的作用是什么:
12.bind()函数的作用是什么:
13.listen()函数的作用是什么:
14.accept函数的作用是什么:
15.connec函数的作用是什么:
16.send和recv函数的作用是:
17.listen是否能够使用在connect功能的套接字上:
18.如果SOCKET连接外网失败那么可能是:
答案在下面
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
1.WinSock(套接字)主要有3种类型
(1)流套接字(SOCK_STREAM),流类型套接字主要是为需要可靠连接的应用程序设计的,这些程序经常使用连续的数据流,用于这种类型的套接字协议的是TCP,流套接字是最常用的名比如HTTP/TCP/SMTP/POP3都是用流套接字
(2)数据包协议套接字(SOCK_DGRAM)数据包套接字使用UDP作为下层协议,是无连接的,有一个最大缓冲区大小,它是为那些需要发送小数据包,并且对可靠性要求不高的应用程序设计的,与流套接字不同,数据包套接字并不保证数据会达到终端,也不保证它是以正确的顺序到来的,数据包套接字传输效率相当高,它经常用于音频或视频应用程序。
(3)不经常使用的有一种类型为原始套接字(raw socket)等
2.全部统一为大端模式
3.从主机顺序字节转换为网络顺序字节API:
u_short htons(u_short hosthort);
u_long htonl(u_long hostlong);
4从网络顺序字节转换到主机顺序字节API:
u_short ntohs(u_short netshort);
u_long ntohl(u_long netlong);
5.inet_ntoa是inet_addr函数的逆函数,它将一个网络字节顺序的32位IP地址转化成字符串char * inet(struct in_addr in);将32位的二进制数转换为字符串。
6.
struct sockaddr_in {
short sin_family;//地址家族
u_short sin_port;//端口号
struct in_addr sin_addr;//IP地址
char sin_zero[8];//空字节、设置为0
};
7.
typedef struct in_addr {
union {
struct { UCHAR s_b1,s_b2,s_b3,s_b4; } S_un_b;
struct { USHORT s_w1,s_w2; } S_un_w;
ULONG S_addr;
} S_un;
使用了union联合体共享了同一块堆,提供了3种IP地址的写入方式,4个BYTE
2个short,1个unsigned long类型
8.WSAStartup()函数的作用是初始化sock的初始化,他可以指定应用程序的所需的Windows Sockets API的版本来获取Winsock实现的详细信息,仅当着函数成功执行之后,应用程序才能调用其他WinsockAPI。
例子:
#pragma comment(lib,”wsock.lib”)
int main(){
WORD Version;
Version=MAKEWORD(2,2);//指定版本号
WSADATA wsadata;//返回DLL库的详细信息
WSAStartup(Version,&wsadata);}
9.WSAClanup();函数的作用是释放WSAStartup()
10.socket();函数的作用是创建套接字.
例子:
socket(AF_INET,SOCK_STREAM,0);
AF_INET是套接字使用的地址形式
SOCK_STREAM是流套接字,使用TCP协议提供连接的可靠传输
SOCK_DGRAM 是数据报套接字,使用UPD提供无连接的不可靠传输
SOCK_RAM 是原始套接字,WinSock接口并不使用某种特定的协议封装他
0是指定协议的类型如果是SOCK_STREAM则指定为0,也可指写为宏IPPROTO_TCP
11.closeSock函数的作用是根据socket返回的套接字对象关闭套接字。
12.bind函数的作用是绑定套接字到指定的IP地址和端口号。
例子:
Int res=bind(socket套接字句柄,(LPSOCKADDR)关联的sockaddr_in结构,结构长度);
13.listen函数是设置套接字进入监听状态,例子listen(套接字句柄,监听队列中也许保持尚未处理的最大连接数)
14.accept函数用于接收到来的连接
例子:accept(套接字句柄,(LPSOCKADDR)&sockadd_in,结构长度);
15.connet函数是与服务器发起连接
例子:connect(套接字句柄,sockaddr_in,结构长度);
16.send是发送数据,recv是接收数据这是相对于流套接字的
例子: send(套接字句柄,发送数据缓冲区的地址,缓存区长度,指定调用方式通常为0);
Recv(套接字句柄是accept返回的的句柄,其他的我一样)函数一样
17.listen函数不能使用在connect的套接字上因为listen会使套接字进入被动模式接受发送accept连接这会导致connect函数无法主动发送数据因此严禁在connect套接字上使用listen函数
18.如果SOCKET连接失败可能是防火墙没有关闭或者没有进行端口转发,比如我自己的腾讯云监听1223端口但就是不行结果是没有在腾讯云控制台中设置对应端口的开放

你可能感兴趣的:(c++,socket,c++,面试,网络)