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. xx.substring(x,x)和xx.index()

    [转的]用一个例子解释: ip = "126.168.1.1"; i = ip.indexOf('.');                           这里默认从0开始找到 ...

  2. java中PriorityQueue优先级队列使用方法

    优先级队列是不同于先进先出队列的另一种队列.每次从队列中取出的是具有最高优先权的元素. PriorityQueue是从JDK1.5开始提供的新的数据结构接口. 如果不提供Comparator的话,优先 ...

  3. ps aux和ps -ef命令区别

      ps aux 是用BSD的格式来显示 java这个进程 显示的项目有:USER,PID,%CPU,%MEM,VSZ,RSS,TTY,STAT,START,TIME,COMMAND   ps -ef ...

  4. Spring mvc 下Ajax获取JSON对象问题 406错误

    我在学习springmvc过程中(我的项目是配置的后缀是.html),从controller返回对象. 如果我不使用 mvc-annotation-driver,而是手动配置,AnnotationMe ...

  5. 一种在视频OBJECT标签上放置均分四个区域的框选方法

    一般在视频区域中做框样式,作应由视频插件自己来实现,但是出于其它一些原因自己琢磨了一个使用HTML标签来实现框选区域的方法,按照行外应该属于笨方法,虽然有点笨,可能在其他方面有借鉴意义,在这里拿出来跟 ...

  6. 在LaTeX文档中插入图片的几种常用的方法

    LaTeX中一般只直接支持插入eps(Encapsulated PostScript)格式的图形文件, 因此在图片插入latex文档之前应先设法得到图片的eps格式的文件. 在LaTeX文档中插入图片 ...

  7. 读取input:file的路径并显示本地图片的方法

    <!doctype html> <html> <head> <meta content="text/html; charset=UTF-8" ...

  8. Latent Dirichlet Allocation 文本分类主题模型

    文本提取特征常用的模型有:1.Bag-of-words:最原始的特征集,一个单词/分词就是一个特征.往往一个数据集就会有上万个特征:有一些简单的指标可以帮助筛选掉一些对分类没帮助的词语,例如去停词,计 ...

  9. Qt之qt4.7 和qt 4.8.4 交叉实践

    开发机环境搭建: 测试环境:CentOs7.1  Ubuntu 12.0.4 操作流程: 一.编译Qt4.7.0 1)CentOS上实践 1.tar xzvf qt-everywhere-openso ...

  10. .net环境下ckeditor与ckfinder中文文件链接乱码的问题

    .net环境下ckeditor与ckfinder中文文件链接乱码的问题 将ckfinder.js中的getUrl:function(){return this.folder.getUrl()+enco ...