1、服务器端程序编写

(1)socket
(2)bind
(3)listen
(4)accept,返回值是一个fd,accept正确返回就表示我们已经和前来连接我的客户端之间建立了一个TCP连接了,以后我们就要通过这个连接来和客户端进行读写操作,读写操作就需要一个fd,这个fd就由accept来返回了。
注意:socket返回的fd叫做监听fd,是用来监听客户端的,不能用来和任何客户端进行读写;accept返回的fd叫做连接fd,用来和连接那端的客户端程序进行读写。
2、客户端程序编写
(1)socket
(2)connect

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

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <arpa/inet.h>
#include <string.h> #define SERPORT 9003
#define SERADDR "192.168.1.141" // ifconfig看到的
#define BACKLOG 100 char recvbuf[]; int main(void)
{
// 第1步:先socket打开文件描述符
int sockfd = -, ret = -, clifd = -;
socklen_t len = ;
   // sockaddr_in:为IPV4数据结构类型,sockaddr_in6位IPV6数据结构类型。sockaddr兼容这两种
struct sockaddr_in seraddr = {};
struct sockaddr_in cliaddr = {}; char ipbuf[] = {}; sockfd = socket(AF_INET, SOCK_STREAM, );
if (- == sockfd)
{
perror("socket");
return -;
}
printf("socketfd = %d.\n", sockfd); // 第2步:bind绑定sockefd和当前电脑的ip地址&端口号
seraddr.sin_family = AF_INET; // 设置地址族为IPv4
   // 设置地址的端口号信息,以太网通信,我们默认为大端模式,这里端口号,我们要进行转换,htons表示将整型变量从主机字节顺序转变成网络字节顺序, 就是整数在地址空间存储方式变为:高字节存放在内存的低地址处
   seraddr.sin_port = htons(SERPORT);   
                                                  //
   //设置IP地址,inet_addr将10进制字符串IP地址转换为二进制网络字节序,这个函数里面做了大端处理,不过inet_addr只适用于IPV4,现在一般使用inet_pton,它适用于IPV4和IPV6
seraddr.sin_addr.s_addr = inet_addr(SERADDR);                             
ret = bind(sockfd, (const struct sockaddr *)&seraddr, sizeof(seraddr));
if (ret < )
{
perror("bind");
return -;
}
printf("bind success.\n"); // 第三步:listen监听端口,BACKLOG为可挂载的监听到的个数
ret = listen(sockfd, BACKLOG); // 阻塞等待客户端来连接服务器
if (ret < )
{
perror("listen");
return -;
} // 第四步:accept阻塞等待客户端接入
clifd = accept(sockfd, (struct sockaddr *)&cliaddr, &len);
printf("连接已经建立,client fd = %d.\n", clifd); /*
// 建立连接之后就可以通信了
// 客户端给服务器发
ret = recv(clifd, recvbuf, sizeof(recvbuf), 0);
printf("成功接收了%d个字节\n", ret);
printf("client发送过来的内容是:%s\n", recvbuf);
*/ /*
// 客户端反复给服务器发
while (1)
{
ret = recv(clifd, recvbuf, sizeof(recvbuf), 0);
//printf("成功接收了%d个字节\n", ret);
printf("client发送过来的内容是:%s\n", recvbuf);
memset(recvbuf, 0, sizeof(recvbuf));
}
*/
// 服务器给客户端发
strcpy(recvbuf, "hello world.");
ret = send(clifd, recvbuf, strlen(recvbuf), );
printf("发送了%d个字符\n", ret); return ;
}

  

(五)socket实践编程的更多相关文章

  1. socket实践编程1

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

  2. 20145206《Java程序设计》实验五Java网络编程及安全

    20145206<Java程序设计>实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验步骤 我和201451 ...

  3. 20145211 《Java程序设计》实验报告五————Java网络编程及安全实验报告

    实验内容 1.掌握Socket程序的编写: 掌握密码技术的使用: 设计安全传输系统. 实验步骤 这一部分是与我的partner合作的,详见他的博客- [20145326 <Java程序设计> ...

  4. 25 python socket网络编程

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

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

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

  6. 20145213《Java程序设计》实验五Java网络编程及安全

    20145213<Java程序设计>实验五Java网络编程及安全 实验内容 1.掌握Socket程序的编写. 2.掌握密码技术的使用. 3.设计安全传输系统. 实验预期 1.客户端与服务器 ...

  7. 20145337实验五Java网络编程及安全

    20145337实验五Java网络编程及安全 实验内容 掌握Socket程序的编写 掌握密码技术的使用 设计安全传输系统 实验步骤 基于Java Socket实现安全传输 基于TCP实现客户端和服务器 ...

  8. JAVA课程实验报告 实验五 Java网络编程及安全

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1353  姓名:韩玉琪  学号:20135317 成绩:             指导教师:娄嘉 ...

  9. 20145225《Java程序设计》 实验五 Java网络编程及安全

    20145225<Java程序设计> 实验五 Java网络编程及安全 实验报告 一.实验内容 基于Java Socket实现安全传输. 基于TCP实现客户端和服务器,结对编程一人负责客户端 ...

随机推荐

  1. markdown语法测试

    斜体 粗体 百度 标题一 -------- 标题二 ======== 标题三 标题四 有序列表一 有序列表二 无序列表一 无序列表二 这是引用的文字 这是一句行内代码var=1 public clas ...

  2. gogo

    Qixoe019uip netstat -apn|grep 808*cd /data/pkg/super-car-store./start 端口 jar包名 //是否查询连锁店数据 if(chainC ...

  3. des加密解密的两个方法

    <?php //$input - stuff to decrypt //$key - the secret key to use function do_mencrypt($input, $ke ...

  4. Simple JavaScript Inheritance--一个极简JS面向对象-类库

    面向对象 面向对象思想的几个重要特征(针对类的要求): 抽象-封装.信息隐藏(将内部实现的方法和数据隐藏, 定义开放的接口) 继承-子类可以使用父类的资源,并可以定制自己的资源, 资源包括方法和数据 ...

  5. pepperflash

    sudo apt-get install pepperflashplugin-nonfree sudo update-pepperflashplugin-nonfree --install

  6. 写在开始编写Java之前(1)——Java的跨平台性

    Java语言之所以比C语言更加实用 是有原因的 Java的一个重要的特点——跨平台性 无论是哪个平台,如Windows.Linus还是Mac系统 Java的语法都是一样的 这个要比C语言用处要广 因为 ...

  7. 三大框架-Hibernate

    概念 持久化框架 把对象保存到数据库中,对数据的CURD操作 ORM框架 ORM对象关系映射 类<->表 属性<->字段 对象<->表中的记录 实现方法 创建持久化 ...

  8. 什么是JSP?它有哪些特点?

    什么是JSP? 它有哪些特点?  JSP是服务器端的一种基于java语言的网页技术,它是由一些JSP标记,java程序段以及HTML文件组成的结合体,以java语言作为其内置的脚本语言.  实质上是通 ...

  9. AJAX-----10iframe模拟ajax文件上传效果原理2

    在实际开发中其实我们可以给用户一些提示,比如上传成功或者上传失败,废话不多说,走码: <!DOCTYPE html> <html lang="en"> &l ...

  10. 【001:ubuntu下搭建ESP8266开发环境--编辑 编译 下载】

    系统环境:ubuntu 16.04 TLS 64BIT 编辑器: Eclipse CDT 版本 编译器:xtensa-lx106-elf 交叉编译工具链 下载工具:esptool.py pyseria ...