1、服务器端程序编写

(1)、socket

(2)、bind

(3)、listen

(4)、accept,返回值是一个fd,accept正确返回就表示我们已经和前来连接我的客户端之间建立了一个TCP连接了,以后我们就要通过这个连接来和客户端进行读写操作,读写操作就需要一个fd,这个fd就由accept来返回的了。

注意:socket返回的fd叫做监听fd,是用来监听客户端的,不能用来和任何客户端进行读写;accept返回的fd叫做连接fd,用来和连接那端的客户端程序进行读写。

 #include <stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <arpa/inet.h> #define MTPORT 9003
#define SERADDR "192.168.1.109"
#define BACKLOG 100
int main(void)
{
//第一步,先socket打开文件描述符
int sockfd = -,ret = -;
socklen_t len = ;
struct sockaddr_in seraddr = {};
struct sockaddr_in cliaddr = {}; sockfd = socket(AF_INET,SOCK_STREAM,);
if(sockfd == -)
{
perror("socket error.\n");
return -;
}
printf("socket success,sockfd = %d.\n",sockfd); //第二步,bind绑定sockfd和当前电脑的ip地址&端口号
seraddr.sin_family = AF_INET; //设置地址族为IPv4
seraddr.sin_port = htons(MTPORT); //设置地址的端口号信息
seraddr.sin_addr.s_addr = inet_addr(SERADDR); //设置ip地址
ret = bind(sockfd, (const struct sockaddr *)&seraddr,sizeof(seraddr));
if(ret < )
{
perror("bind");
return -;
}
printf("bind success.\n"); //第三步:listen监听端口
ret = listen(sockfd,BACKLOG);
if(ret < )
{
perror("listen");
return -;
}
//第四步:accept阻塞等待客户端接入
ret = accept(sockfd,(struct sockaddr *)&cliaddr,&len);
printf("hahah.\n");
return ;
}

2、客户端程序编写

(1)、socket

(2)、connect

概念:端口号,实质就是一个数字编号,用来在我们一台主机中(主机的操作系统中)唯一的标识一个能上网的进程。端口号和IP地址一起会被打包到当前的进程发出或者接收到的每一个数据包中。每一个数据包将来在网络上传递的时候,内部都包含了发送方和接收方的消息(就是IP地址和端口号),所以IP地址和端口号这两个往往是打包在一起不分家的。

 #include <stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <arpa/inet.h> #define CLIPORT 9003 //这里是服务器开放给我们的ip地址和端口号
#define SERADDR "192.168.1.109" int main(void)
{
//第一步,先socket打开文件描述符
int sockfd = -,ret = -;
struct sockaddr_in seraddr = {};
//第一步:socket
sockfd = socket(AF_INET,SOCK_STREAM,);
if(sockfd == -)
{
perror("socket error.\n");
return -;
}
printf("socket success,sockfd = %d.\n",sockfd); //第二步,connect连接服务器
seraddr.sin_family = AF_INET; //设置地址族为IPv4
seraddr.sin_port = htons(CLIPORT); //设置地址的端口号信息
seraddr.sin_addr.s_addr = inet_addr(SERADDR); //设置ip地址
ret = connect(sockfd, (const struct sockaddr *)&seraddr,sizeof(seraddr));
if(ret < )
{
perror("connect");
return -;
}
printf("connect success,ret = %d.\n",ret); return ;
}

socket实践编程1的更多相关文章

  1. (五)socket实践编程

    1.服务器端程序编写 (1)socket(2)bind(3)listen(4)accept,返回值是一个fd,accept正确返回就表示我们已经和前来连接我的客户端之间建立了一个TCP连接了,以后我们 ...

  2. 25 python socket网络编程

    一 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端为你提供视频 ...

  3. Linux Socket 网络编程

    Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...

  4. Python Socket 网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

  5. Python全栈【Socket网络编程】

    Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ...

  6. python之Socket网络编程

    什么是网络? 网络是由节点和连线构成,表示诸多对象及其相互联系.在数学上,网络是一种图,一般认为专指加权图.网络除了数学定义外,还有具体的物理含义,即网络是从某种相同类型的实际问题中抽象出来的模型.在 ...

  7. Python之路【第七篇】python基础 之socket网络编程

    本篇文章大部分借鉴 http://www.cnblogs.com/nulige/p/6235531.html python socket  网络编程 一.服务端和客户端 BS架构 (腾讯通软件:ser ...

  8. Socket网络编程-基础篇

    Socket网络编程 网络通讯三要素: IP地址[主机名] 网络中设备的标识 本地回环地址:127.0.0.1 主机名:localhost 端口号 用于标识进程的逻辑地址 有效端口:0~65535 其 ...

  9. Socket网络编程--FTP客户端

    Socket网络编程--FTP客户端(1)(Windows) 已经好久没有写过博客进行分享了.具体原因,在以后说. 这几天在了解FTP协议,准备任务是写一个FTP客户端程序.直接上干货了. 0.了解F ...

随机推荐

  1. SQLmap自动注入工具命令(10.28 10.29 第二十八 二十九天)

    SQL注入工具:明小子  啊D   萝卜头   sqlmap  等等 SQLMAP:开源的自动化诸如利用工具,支持的数据库有12中,在/plugins中可以看到支持的数据库种类,在所有注入利用工具中他 ...

  2. 安装scrapy框架报错是常见问题

    还好,本人只碰到其中一个bug,以下是此次安装经验 环境 py3.4 windows7 64位 安装有VS2010 pip包管理(pycharm) 报错信息 安装lxml过程中报错:error: co ...

  3. wamp修改端口localhost

    一.修改Apache端口 1.在界面中选Apache,弹出隐藏菜单选项,打开配置文件httpd.conf: 2.找到 Listen 80: ServerName localhost:80; 3.将 8 ...

  4. node - 获取当前时间并格式化

    1,安装 moment模块 cnpm i moment --save 2,引入 var moment = require('moment'); 3,获取当前时间并格式化 var current_tim ...

  5. systemctl无法停掉keepalived

    这个问题搞了好半天,记录一下,启停都是用的systemctl 起初是测试vip漂移时候发现,主备节点都开启keepalived的状况下,一切正常,主节点的vip也可以访问. 第一次停掉主节点的keep ...

  6. 在 Windows 系统上安装 Jekyll

    目录 安装 Ruby 环境 用 Bundler 安装 Jekyll 本文是写给完全未用过 Ruby 乃至命令行工具者的.对于一般的开发者,Jekyll 官方文档的相关内容已然足够. 本文为钱院学辅技术 ...

  7. 046-unset对静态变量无法销毁

    <?php function digui() { static $count = 0; echo $count; $count++; unset($count); } digui(); digu ...

  8. spring教程

    Spring框架是Java EE开发中最流行的框架,已经成为JEE事实上的标准,全世界的开发人员都在使用Spring框架开发各种应用.随着Spring boot,Spring cloud新版本的不断推 ...

  9. UVA - 11892 ENimEN(博弈)

    题意:有n堆石子,两个人拿,拿走最后的石子的人赢,poopi先拿,条件是,每个人必须从另外一个人最后拿过的石子堆中取石子,若那堆石子被拿没了,才可以自由地拿其他堆.要求每次拿的石子数不能为0.问谁赢. ...

  10. AD走圆弧走线

    美式键盘: “shift  +  空格”