linux下socket编程,菜鸟求解。。。

linux下socket编程,菜鸟求解。。。,第1张

你这个东西问题太多啦,老实说,我那过去编都编不过。我改好了,给你指出几个重大错误!

server:

#include<stdioh>

#include<sys/socketh>

#include<sys/typesh>

#include<arpa/ineth>

#include <unistdh>

#include<fcntlh>

#include<stringh>

#define IPADDR "127001"

#define PORT 21234

const char logpath = "/log";

int main()

{

struct sockaddr_in servaddr,cliaddr;

int sockfd,clifd,logfd;

socklen_t clilen;

servaddrsin_family = AF_INET;

servaddrsin_port = htons(PORT);

servaddrsin_addrs_addr = htonl(INADDR_ANY);

//bzero(&servaddr,sizeof(servaddr));

sockfd=socket(AF_INET,SOCK_STREAM,0);

bind(sockfd,(struct sockaddr )&servaddr,sizeof(servaddr));

listen(sockfd,8);

printf("aaaaaaaaaaaaaaaa\n");

char buf[500] = {0};

for(;;)

{

clilen = sizeof(cliaddr);

clifd=accept(sockfd,(struct sockaddr )&cliaddr,&clilen);

printf("%d\n",clifd);

if(clifd < 0)

{

printf("cccccccccccccccccccccc\n");

continue;

}

else

{

printf("dddddddddddddddddddddddd\n");

strcpy(buf,"welcome to 127001:21234");

send(clifd,buf,strlen(buf),0);

}

close(clifd);

}

close(sockfd);

return 0;

}

client:

#include <stdioh>

#include <sys/socketh>

#include <unistdh>

#include <sys/typesh>

#include <arpa/ineth>

#include <stdlibh>

#include <fcntlh>

#include <stringh>

#define PORT 43212

#define SERVPORT 21234

#define SERVADDR "127001"

int main()

{

int servfd,clifd,connre;

struct sockaddr_in servaddr,cliaddr;

clifd=socket(AF_INET,SOCK_STREAM,0);

servaddrsin_family = AF_INET;

servaddrsin_port = htons(21234);

servaddrsin_addrs_addr = inet_addr("127001");

//bzero(&servaddr,sizeof(servaddr));

if((connre=connect(clifd,(struct sockaddr )&servaddr,sizeof(servaddr)))<0)

{

printf("sorry,connect wrong\n");

exit(1);

}

printf("%d\n",connre);

printf("connect ok,waiting for the server's message back\n");

int length;

char buf[500];

while(1)

{

if((length = recv(clifd,buf,500,0))<0)

{

continue;

}

else

{

printf("get it ,get it\n");

break;

}

}

printf("hi,it's the client,I have recieve message :'hello,welcome' from server");

close(clifd);

return 0;

}

/////////////////////////////////

错误1:bzero(&servaddr,sizeof(servaddr)); //刚赋值又清0,why

错误2:servaddrsin_port = htons(PORT);//你要连的是serverport

其他的错误懒得说了,自己看吧累死我了

Linux双网卡socket端口号设置成一样的方法是:

1 使用ifconfig命令查看网卡的IP地址;

2 使用vi编辑器打开/etc/sysconfig/network-scripts/ifcfg-eth0文件;

3 在文件中添加一行:PORT=端口号;

4 保存文件,重启网卡;

5 重复步骤1-4,设置另一个网卡的端口号。

如果你的客户端在发送文件时,每次都重新connect,再进行数据传输,则你的程序无法解决数据的区分。

如果客户端是一次connect循环发送,后台服务循环接收,则

(1)如果你的服务端只有一个进程(不支持并发),则A和B不会同时运行,只能按顺序接收完A再接收B

(2)如果,每一个新链接上来,你都建立一个新的进程去工作,则不会有问题。

使用sendto函数。

linux发送socket报文使用UDP协议发送报文,首先创建一个socket,然后设置服务器的IP地址和端口号,最后使用sendto函数发送报文。

Linux全称是GNU/Linux,是一种免费使用和自由传播的类UNIX *** 作系统。

有连接的socket客户端通过调用Connect函数在socket数据结构中保存本地和远端信息,无须调用bind(),因为这种情况下只需知道目的机器的IP地址,而客户通过哪个端口与服务器建立连接并不需要关心,socket执行体为你的程序自动选择一个未被占用的端口,并通知你的程序数据什么时候打开端口。

(当然也有特殊情况,linux系统中rlogin命令应当调用bind函数绑定一个未用的保留端口号,还有当客户端需要用指定的网络设备接口和端口号进行通信等等)

以上就是关于linux下socket编程,菜鸟求解。。。全部的内容,包括:linux下socket编程,菜鸟求解。。。、linux双网卡socket端口号设置成一样、linux下socket文件传输问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/web/9488772.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存