Linux Socket 函数库是从 Berkeley 大学开发的 BSD UNIX 系统中移植过来的。BSD Socket 接口是在众多 Unix 系统中被广泛支持的 TCP/IP 通信接口,Linux 下的 Socket 程序设计,除了微小的差别之外,也适用于大多数其它 Unix 系统。

  Socket 的使用,和文件操作比较类似。如同文件的读、写、打开、关闭等操作一样,TCP/IP 网络通信同样也有这些操作,不过它使用的接口不是文件描述符或者 FILE*,而是一个称做 Socket 的描述符。类似于文件操作,对于 Socket,也通过读、写、打开、关闭操作来进行网络数据传送。同时,还有一些辅助的函数,如域名/IP 地址查询、Socket 功能设置等。

  这星期的实验是Socket编程实验,我将自己的套在框架下写的代码分享出来。一份是TCP代码,sender向receiver发送"hello",receiver将"hello"原封不动发回去,sender接收到"hello"后断开连接,两个服务同时down。第二份是UDP代码,receiver监听自己的端口,sender向receiver发送0-8的整数,receiver不会对收到了的信息作确认。发送完毕后sender down,receiver会继续监听。

  阅读接下来的代码需要对Socket中的函数,Socket标志符等概念十分清楚,其中一份TCP代码经过了详细的注释。bind(),listen(),send()......这些Socket库中的函数都需要读者提前了解他们的功能。

  放出一份TCP Receiver的代码,其余的代码在文末可以下载。

 #include <stdio.h>
#include <string.h>
//数据格式转换
#include "net_exp.h"
#include <netinet/in.h> main(){
//TCP/IP中专用的用于监听连接请求的本地地址
struct sockaddr_in client, server;
int s,ns,namelen,pktlen;
char buf[];
//定义套接字,返回值是Socket描述符
s = socket(AF_INET, SOCK_STREAM, );
//将指针当前位置后面的sizeof(server)个字节清0
memset((char*)&server, , sizeof(server));
//Address family
server.sin_family = AF_INET;
//Port number,转换成unsigned short int
server.sin_port = htons(TCP_SERVER_PORT);
server.sin_addr.s_addr = INADDR_ANY;
//给已经打开的socket指定本地地址,注意看,传参数的时候有类型转换
bind(s, (struct sockaddr*)&server, sizeof(server));
//s-Socket描述符,backlog-连接请求暂存队列长度,
//调用listen系统将给此Socket配备一个连接请求的队列,暂存系统接收到的、申请向此Socket建立连接的请求。
listen(s, );
namelen = sizeof(client);
//accept:接受指定Socket上的连接请求,返回一个新的socket标识符,相当于创建了一个新的Socket用于传输数据,
//原来的Socket仍用来监听请求。
ns = accept(s, (struct sockaddr*)&client, &namelen);
for(;;){
//接收ns上受到的数据,存入buf
pktlen = recv(ns, buf, sizeof(buf), );
if(pktlen==)
break;
printf("Received line:%s\n", buf);
//向发送方返回一模一样的数据
send(ns, buf, pktlen, );
}
close(ns);
close(s);
}

  想自己修改功能的话,修改源码按照我最近写的一个随笔重新编译即可。比如实现两个终端或者两个主机聊天。

  源码,可执行程序:https://files.cnblogs.com/files/chester-cs/Socket.zip




TCP和UDP的Socket编程实验的更多相关文章

  1. TCP与UDP在socket编程中的区别

    一.TCP与UDP的区别 基于连接与无连接  对系统资源的要求(TCP较多,UDP少)  UDP程序结构较简单  流模式与数据报模式  TCP保证数据正确性,UDP可能丢包  TCP保证数据顺序,UD ...

  2. 【socket】TCP 和 UDP 在socket编程中的区别

    一.TCP与UDP的区别 基于连接与无连接  对系统资源的要求(TCP较多,UDP少)  UDP程序结构较简单  流模式与数据报模式  TCP保证数据正确性,UDP可能丢包  TCP保证数据顺序,UD ...

  3. TCP与UDP在socket编程中的区别 (网络收集转载)

    http://blog.chinaunix.net/uid-26421509-id-3814684.html 一.TCP与UDP的区别 基于连接与无连接  对系统资源的要求(TCP较多,UDP少)  ...

  4. TCP 和 UDP 在socket编程中的区别(转)

    一.TCP与UDP的区别 基于连接与无连接  对系统资源的要求(TCP较多,UDP少)  UDP程序结构较简单  流模式与数据报模式  TCP保证数据正确性,UDP可能丢包  TCP保证数据顺序,UD ...

  5. iOS网络HTTP、TCP、UDP、Socket 知识总结

    OSI 七层模型 我们一般使用的网络数据传输由下而上共有七层,分别为物理层.数据链路层.网络层.传输层.会话层.表示层.应用层,也被依次称为 OSI 第一层.第二层.⋯⋯. 第七层. 如下图: 各层功 ...

  6. HTTP、TCP、UDP以及SOCKET

    HTTP.TCP.UDP以及SOCKET 一.TCP/IP代表传输控制协议/网际协议,指的是一系列协组. 可分为四个层次:数据链路层.网络层.传输层和应用层. 在网络层:有IP协议.ICMP协议.AR ...

  7. 基于TCP/UDP的socket编程

    基于TCP(面向连接)的socket编程服务器端顺序: 1. 创建套接字(socket) 2. 将套接字绑定到一个本地地址和端口上(bind) 3. 将套接字设为监听模式,准备接收客户请求(liste ...

  8. 网络编程:tcp、udp、socket、struct、socketserver

    一.TCP.UDP 一.ARP(Address Resolution Protocol)即地址解析协议,用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址. 二.在网络通信中 ...

  9. Python socket 编程实验

    实验内容 1.编写一个基于UDP协议的客户机与服务器程序,实现相互通讯. 2.编写一个基于TCP协议的客户机与服务器程序,实现相互通讯. 3.捕获以上两种通讯的数据包,使用Wireshark进行分析, ...

随机推荐

  1. Maven、Gradle 配置国内镜像源

    Maven 全局配置 修改 Maven 默认的全局配置文件: 类 Unix 系统: Mac OS / Linux 默认在 ~/.m2/settings.xml Windows 系统:一般在 Maven ...

  2. Crontab定时备份网站脚本及mysql数据库

    1)shell脚本 #!/bin/bash #你要修改的地方从这里开始 MYSQL_USER="root" #mysql用户名 MYSQL_PASS="123456&qu ...

  3. html常用字体

    例1(小米米官网):font-family: "Arial","Microsoft YaHei","黑体","宋体",s ...

  4. linux克隆之后网络设置

    1.修改网络 vi /etc/sysconfig/network-scripts/ifcfg-eth0 修改:ip地址 IPADDR=192.168.77.83GATEWAY=192.168.77.2 ...

  5. ES[7.6.x]学习笔记(十)聚合查询

    聚合查询,它是在搜索的结果上,提供的一些聚合数据信息的方法.比如:求和.最大值.平均数等.聚合查询的类型有很多种,每一种类型都有它自己的目的和输出.在ES中,也有很多种聚合查询,下面我们看看聚合查询的 ...

  6. jmeter之cookies管理器的使用

    作用: 1 发送请求,经常要校验cookies信息  2 针对有的cookie是用的sessionid来进行校验的,这个就需要自己去配置cookie管理器里面的信息,而且sessionid是有时效性的 ...

  7. 0506static【重点】

    static[重点] [重点] 1.[没有对象] [没有对象] [没有对象] 2.static 修饰的是一个资源共享类型的变量 3.静态成员变量的基本使用规范 static修饰的成员变量只能通过静态方 ...

  8. TensorFlow的checkpoint文件转换为pb文件

    由于项目需要,需要将TensorFlow保存的模型从ckpt文件转换为pb文件. import os from tensorflow.python import pywrap_tensorflow f ...

  9. Redis详解(十)------ 从零开始搭建集群

    在上一篇博客我们介绍了------Redis哨兵(Sentinel)模式,哨兵模式主要是解决高可用问题,在master节点宕机时,slave节点能够自动切换成为master节点 本篇博客我们来介绍Re ...

  10. 才华能力出众的ReentrantLock

    主要内容 1. synchronized介绍 2. ReentrantLock介绍 3. ReentrantLock和synchronized的可伸缩性比较 4. Condition变量 5. Ree ...