Linux中本机和本机Socket通信会走网卡吗

Linux中本机和本机Socket通信会走网卡吗,第1张

我写一个测试程序,结论是:不需要走网卡

我生成了一个5G的大文件。同时传输的过程中,我把网卡拔掉,最后数据传输完毕。

不过这是一个很傻逼的行为,因为直接把网卡拔掉就可以测试。

至于原因 @pansz已经提到了。 虽然我行为是傻逼了点,不过写这个程序的过程中还是收获不少呢,因为刚学网络编程,多挖几个坑还自己还是有好处的。

代码如下:

生成文件的代码:

#define SIZE 5000000

#define OPEN_MODE 00777

int main(int argc,char **argv){

srand(time(NULL))

int fd=open("output.txt",O_APPEND|O_RDWR)

int n=0

char buf[1024]={0}

for(int i=0i<SIZEi++){

for(int j=0j<1023j++){

buf[j]=(char)(rand()%94+32)

}

buf[1023]='\0'

n=write(fd,buf,1024)

}

close(fd)

return 0

}

Client

int len=0

while((len=read(fd,sendline,1024))){

if( send(sockfd,sendline,strlen(sendline), 0) <0)

{

printf("send msg error: %s(errno: %d)\n", strerror(errno), errno)

exit(0)

}

if((rec_len = recv(sockfd, buf, MAXLINE,0)) == -1) {

perror("recv error")

exit(1)

}

memset(sendline,0,1024)

buf[rec_len] = '\0'

printf("Received : %s ",buf)

}

close(sockfd)

Server

void Server::EventLoop(){

int fd=open("re.txt",O_APPEND | O_RDWR)

cout<<"waiting for client's request."<<endl

if((cfd=accept(sfd,reinterpret_cast<struct sockaddr*>(NULL),NULL))==-1){

std::cerr<<"acceprt error!"<<endl

}

while(1){

nread=recv(cfd,buf,BUF_SIZE,0)

buf[nread]='\0'

write(fd,buf,nread)

printf("the size is: %zd\n",nread)

if(send(cfd,"Yeah I have receive your message.\n",40,0)==-1){

std::cerr<<"send error."<<endl

exit(-1)

}

}

close(sfd)

}

首先,第一socket是和平台无关的,他是一套规则,所有的平台都是通用的。第二socket肯定能用于arm开发板上linux和windows的通信。第三,虽然socket和平台无关,但是在linux下和windows下的编写会有些差异,主要表现在包含的库和头文件上,还有windows对socket还自定义的一些东西,具体的去学习下socket,或者说windows网络编程,还有linux网络编程之类的知识吧

多看书阿...

用select或者poll或者epoll吧..还有一个类似的

功能就是,等待事件发生,比如某个socket(或者句柄)有了数据什么的,select可以判断出来,并且返回,让你知道哪个socket出现事情了。他监听的句柄范围中没事情发生时,进程或者线程就阻塞(超时时间可以设置).

这样你就可以在select知道哪个出现数据之后,再去 *** 作对应的socket

你说相互通信,干吗还要中转,自己用ip:port就好了阿...

要是大家都对服务器有某个请求,服务器端就用select吧..如果你处理的链接数很大,就用poll或者epoll吧,效果更好....剩下的自己去查资料...


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8309200.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存