LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: hu258f

初学unix网络编程提问

[复制链接]
发表于 2004-1-3 13:07:01 | 显示全部楼层
那些大写字母打头的函数都是UNP这本书里的,你没有装这本书的库就用不成,建议你先另外找一个标准的代码看看。
发表于 2004-1-3 14:03:59 | 显示全部楼层
难怪我老看到些unp.h文件了,呵呵,有人有这本书的代码不,发上来可以不?
 楼主| 发表于 2004-1-3 14:31:19 | 显示全部楼层
^_^!!

#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#define PORT 4567
#define BUFSIZE 512
int main (int argc,char ** argv)        //argc,argv是什么意思?
{
int socketfd,n;
char buf[BUFSIZE];
struct sockaddr_in server;

if (argc!=2)
{
  printf("%s","ip address err");
  exit(-1);
}
if ((socketfd=socket(AF_INET,SOCK_STREAM,0)<=0)) //是否正确返回socketfd
{
  printf("%s","socket err");
  exit(-1);
}
bzero($server,sizeof(server));   //清空栈
server.sin_family=AF_INET;       //赋套接口结构地址族,AF_INET
server.sin_port=htons(PORT);     //赋16位TCP端口号
server.sin_addr.s_addr=inet_addr(argv[1]);   //赋32位ip
if (connect(socketfd,(struct sockaddr *)&server,sizeof(server))<0)  //是否建立tcp连接
  {
  printf("%s","connert err");
  exit(-1);
}
if (recv(socketfd,buf,BUFSIZE,0)<0)  //收到否
{
  printf("s%","recever err");
  exit(-1);
}
else                           //收到
printf("%s",buf);
close(socketfd);
}
这个程序可以编译成功,可是argc,argv是什么意思?
我基本上可以看懂,用本机127.0.0.1怎么验证,我不晓得怎么运行

麻烦了!!
发表于 2004-1-3 14:53:53 | 显示全部楼层
最初由 hu258f 发表

int main (int argc,char ** argv)        //argc,argv是什么意思?

这个程序可以编译成功,可是argc,argv是什么意思?
我基本上可以看懂,用本机127.0.0.1怎么验证,我不晓得怎么运行

麻烦了!!


嘿嘿~刚好能帮一个。。
argc的意思是记录编译后可执行程序的参数的个数。
如./a.out hello well
这时argc == 3
argv是记录参数的名字吧。
这里就是argv[0] == ./a.out ,argv[1]==hello argv[2]==well

以前问有的。详细看:
http://www.linuxsir.cn/forum.php?mod=viewthread&tid=79370
还有APUE的P122.
发表于 2004-1-3 15:15:22 | 显示全部楼层
server.sin_addr.s_addr=inet_addr(argv[1]);
这里是不是错了?应该是server.sin_addr=inet_addr(argv[1]);
:ask :ask
还有接收的单词错了。应该是receive .
 楼主| 发表于 2004-1-3 19:54:16 | 显示全部楼层
home 看看这个
struct in_address {
in_addr_t s_addr ;
}
// 32bits IPv4 地址
//网络字节顺序 Network Byte Order

struct sockaddr_in{
unit8_t sin_len; //长度成员, 无需设置
sa_family_t sin_family; //套接口结构地址族,AF_INET
in_port_t sin_port; //16位TCP 或 UDP 端口号
struct in_addr sin_addr; //32位TCP 或 UDP 端口地址
char sin_zero[8]; //未用
}

还有recev(),也是对的

谢谢你了
发表于 2004-1-4 03:50:32 | 显示全部楼层
Richard Stevens的主页上有源码:
http://www.kohala.com/start/
不过源码编译的时候好像不太容易,而且你写的程序编译的时候要连接UNP的库,不知道你对这些东西熟不熟。
发表于 2004-1-4 15:20:33 | 显示全部楼层
to hu258f:
谢谢你的解释!我指的单词错误是你打印那里printf("reverce error ")
这里的单词拼错了。
发表于 2004-1-4 15:22:03 | 显示全部楼层
最初由 libinary 发表
Richard Stevens的主页上有源码:
http://www.kohala.com/start/
不过源码编译的时候好像不太容易,而且你写的程序编译的时候要连接UNP的库,不知道你对这些东西熟不熟。


好可惜阿~~~Richard Stevens已经去逝,但还有人维护他的站点。
发表于 2004-1-10 17:27:21 | 显示全部楼层

to hu258f:

你这是客户端,还需要运行服务端,可以在本机同时运行客户端和服务端程序验证;
该客户端程序运行参数要求提供服务端IP地址(点码各式)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表