
你这个东西问题太多啦,老实说,我那过去编都编不过。我改好了,给你指出几个重大错误!
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文件传输问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)