快速理解Linux下网络编程基础

来源:互联网 发布:ubuntu 16.04 升级 编辑:程序博客网 时间:2024/06/03 22:48

故事的发生是这样的:

大魔王 (@大雪山(INET) ---黑魔洞(STREAM)----坐标192.168.0.xxx) 

从长安城中抓走了美丽的公主 ,绑架到了自己的洞穴中 bind

然后,一个勇士(Mario)马利奥 前去解救公主。

大魔王在洞中等着,它是Server  马利奥向洞穴进发,它为 clients

好了,我们开始:(为了在IDE下代码提示,我们可以先加上 #include <winsock2.h>)


socketclientsserverint st = socket(AF_INET, SOCK_STREAM,0);
// 初始化世界副本(定义本世界规则:本世界IP,使用TCP协议)

struct sockaddr_in addr;   //构建大雪山-黑魔洞地址
addr.sin_family = AF_INET;//魔王老家地址以(IP)形式表示
addr.sin_port = htons(8081);    //魔王的洞口是山上第8081个洞
addr.sin_addr.s_addr = inet_addr(argv[1]);  //魔王洞的IP地址

connect(st,(struct sockaddr *)&addr,sizeof(addr));
//勇士通过地图的指引,找到了洞口外
//“开门!我来也!”

//......
//......
//.......
//......
//......
//.......

//终于开门了~


//哎呀,怪物来了,我接招~
char s[1024];
if(recv(st,s,sizeof(s),0)>0)
{
printf("recv:%s\n",s);
}
// 英雄1 出师未捷身先死....
//客户端关闭世界副本
close(st);


int st = socket(AF_INET, SOCK_STREAM, 0);
// 初始化世界副本并编号,防止串错了世界

struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(8081);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
//勇士啊,你从何处来?都可以,来吧!

bind(st,(struct sockaddr *)&addr,sizeof(addr));
//公主被绑架(当前世界,魔王洞在迷宫深处-没有指针(地图)找不到,地图大小
listen(st,100); //魔王通过顺风耳听着,只要来的勇士不超过它的要求,尽管来!

//哈哈,来了一个送死的所谓勇士,让他进来闯关吧!
//哦,对了
int client_st = 0; //给它一个编号
struct sockaddr_in client_addr; //以它从哪里来做记录!
socklen_t len = sizeof(client_addr); //地址好长啊,看看有多长?
void *p = &client_addr; //记地址太累了,拿着箭头指着就行了

//好了,魔王把你的信息已经记录下来了,不杀无名之辈啊
accept(st,(struct sockaddr *)&client_st,&len); 
//现在,应你的要求,给你开门,来送死吧~~~~哈k~

//先来个小测试~
char s[1024]="黑鸭子,go~"
send(client_st,s,strlen(s),0);
                                 
printf("不行啊,这就挂了!\n");
close(client_st); //回去找个厉害点的吧~

//今天累了,英雄也杀掉不少了,没人再来了
close(st); //关闭世界副本















































0 0
原创粉丝点击