1.mystery引入

 

   1)UDP也可以编写出C/S程序 ,另外TCP也可以编写点对点通信。
   2)网络的本质就是资源共享,当前流行的P2P应用正好暗合了这种精神。
   3)当前流行的Web服务,其标准协议是HTTP,很多从事Web应用程序开发的开发者,从事的就是这种应用的网络编程,所采用的开 发模式是浏览器/服务器结构,也称为B/S结构 。
   4)B/S结构是C/S结构的一个变种,是指开发者不需要开发独立的客户端软件,浏览器就是此时的客户端,开发者只需要在服务器端编写并部署脚本,资源请求者就可以通过URL进行访问了。
   5)Socket提供一种原始套接字机制,能够让开发者直接操纵IP层。
   6)利用Socket编程还可以编写出广播和组播应用程序。
   7)广播是指向当前局域网所有的在线主机发送数据,ARP协议就是利用广播机制。
   8)组播相对广播,也可了理解为广播的一个子集,类似于QQ中的群。


2.源

 

   服务端:

//TCPServer.c
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#define SERVER_PORT 5555
main()
{int serverSocket;struct sockaddr_in server_addr;struct sockaddr_in clientAddr;int addr_len = sizeof(clientAddr);int client;char buffer[1024];int iDataNum ;if((serverSocket = socket(AF_INET,SOCK_STREAM,0)) < 0){perror("socket");exit(1);}bzero(&server_addr,sizeof(server_addr));server_addr.sin_family =AF_INET;server_addr.sin_port = htons(SERVER_PORT);server_addr.sin_addr.s_addr = htonl(INADDR_ANY);if(bind(serverSocket,(struct sockaddr *)&server_addr,sizeof(server_addr)) < 0){perror("connect");exit(1);}if(listen(serverSocket,5)<0){perror("listen");exit(1);}while(1){client = accept(serverSocket,(struct sockaddr *)&clientAddr,(socklen_t*)&addr_len);if(client < 0){perror("accept");continue;}iDataNum = recv(client,buffer,1024,0);if(iDataNum < 0){perror("Recv");continue;}printf("\nRecv client data.......\n");printf("IP is %s\n",inet_ntoa(clientAddr.sin_addr));printf("Port is %d\n",htons(clientAddr.sin_port));printf("Recv Data is %s\n",buffer);send(client,buffer,sizeof(buffer),0);}
}

View Code

   客服端:

//TCPClient.c
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
main()
{struct sockaddr_in serverAddr;int clientSocket;char sendbuf[200];char recvbuf[200];if((clientSocket=socket(AF_INET,SOCK_STREAM,0)) < 0){perror( "socket error" );return -1;}serverAddr.sin_family=AF_INET;serverAddr.sin_port=htons(5555);serverAddr.sin_addr.s_addr=inet_addr("127.0.0.1");if(connect(clientSocket,( struct sockaddr * )&serverAddr,sizeof(serverAddr)) < 0){perror("connect");exit(1);}printf("connect with destination host.....\n");while(1){printf("Input your World:>");scanf("%s",sendbuf);printf("\n");if(strcmp(sendbuf,"quit") == 0)break;send(clientSocket,sendbuf,sizeof(sendbuf),0);recv(clientSocket,recvbuf,200,0);printf("recv data of my world is: %s\n",recvbuf);}close(clientSocket);return 0;
}

View Code


3.mystery注

 

1) addr_in存储主机IP地址
   2)sockaddr_in用于表示Internet协议簇地址结构
   3)sockaddr存储主机IP地址与接口信息
   4)addr_in是一个结构体,其中包含一个联合体,其中结构体s_un_b中的4个字段s_b1/s_b2/s_b3/s_b4分别对应IP地址点分法下的4个  值
   5)inet_addr()函数的作用是将字符形式的IP地址转换成整数值
   6)htons()和htonl()函数用于字节序的转换,表示将数值从主机字节序转换成网络字节序
   7)htons()函数是16字节序转换

8)htonl()函数是32字节序转换

【Socket】linux套接字技术之tcp相关推荐

  1. linux网络编程Internet Socket地址,套接字,和函数

    文章内容节选<linux/UNIX 系统网络编程> Internet domain socket地址有两种:IPv4 IPv6 IPv4被存储在结构体中, 该结构体在 netinet/in ...

  2. 网络编程(part9)--socket套接字编程之TCP套接字

    鄙人学习笔记 文章目录 套接字介绍 定义 套接字分类(针对TCP和UDP的分类) TCP套接字编程 服务端流程 代码实现 举个例子 客户端流程 代码实现 举个例子 TCP套接字数据传输特点 做个练习 ...

  3. Python网络编程——socket套接字实现UDP/TCP信息传输

    socket套接字 socket(简称 套接字) ,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来 ...

  4. Mac用Xcode建立TCP和UDP Socket(套接字)编程

    TCP和UDP均采用自己电脑,既做服务器端又做客户端,当然Xcode无法同时运行两个Target,所以可以选择一个在终端,一个在Xcode,或者两个都在终端. TCP服务器端: #include< ...

  5. Linux 套接字编程中的 5 个隐患

    Linux 套接字编程中的 5 个隐患 (2011-05-03 17:50) 分类: Socket编程 在 4.2 BSD UNIX® 操作系统中首次引入,Sockets API 现在是任何操作系统的 ...

  6. iOS - Socket 网络套接字

    1.Socket 套接字 所谓 Socket,通常称为 "套接字",网络应用程序通过套接字向网络发送请求或者应答网络请求.Socket 通常用于描述 IP 地址和端口,是应⽤层与 ...

  7. linux 套接字选项定义

    2019独角兽企业重金招聘Python工程师标准>>> linux 套接字选项定义 2011-07-28 14:31 1.closesocket(一般不会立即关闭而经历TIME_WA ...

  8. Linux套接字聊天

    Linux套接字 套接字是一种通信机制,凭借这种机制,客户/服务器系统的开发工作既可以在本地单机上进行,也可以跨网络进行. 套接字的特性有三个属性确定,它们是:域(domain),类型(type),和 ...

  9. Socket(套接字)详解 画图+实例

    Socket概念 Socket本意为"插座",在Linux下,用于表示进程间网络通信的特殊文件类型,本质为内核借助缓冲区形成的伪文件. 既然是文件,那肯定就可以使用文件描述符引用套 ...

最新文章

  1. CodeSmith实用技巧(十四):使用Progress对象
  2. SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-003-@Conditional根据条件生成bean及处理profile...
  3. killall 后面信号_Linux 下使用 killall 命令终止进程的 8 大用法
  4. poj 2236 WirelessNetwork 并查集
  5. android 本地 播放器,Android 本地播放器
  6. mysql 特殊函数_mysql 的特殊函数
  7. apriori算法_机器学习(无监督学习)关联规则Apriori算法原理与python实现
  8. centos7连接华为san存储_centos7配置nfs共享存储服务
  9. 强化学习各概念整理(value/policy-based、on/off-policy、model-based/free、offline)
  10. 计算机五笔教案ppt,计算机基础课件五笔打字.ppt
  11. docker daemon配置阿里云加速器
  12. Introduction to Computer Networking学习笔记(二十):TCP拥塞控制-基本方法 AIMD
  13. 原生js实现表单的正则验证,所有验证都通过后提交按钮才可用
  14. 计算机ppt以学校生活为主题的作文,校园生活为话题的作文(精选10篇)
  15. 通过实例彻底理解闭包
  16. Windows Azure 解决方案系列: Real World Windows Azure: 与微软杰出工程师, Sean Nolan的访谈...
  17. 求最大公约数c语言实验心得,C语言编程实训报告(合集)
  18. 反诈中心拦截网站域名措施与申诉方法
  19. [Zookeeper] 安装and各 配置参数详解
  20. 关于公网摄像机直播公网视频直播的基本思考方法

热门文章

  1. mysql主从切换gtid不一致_解决mysql使用GTID主从复制错误问题
  2. godaddy 管理mysql_在godaddy上使用MySQL和Entity Framework的安全例...
  3. 笔记-项目整体管理-项目管理计划
  4. 常见数控机床的数据采集方法比较
  5. CentOS7中卸载Docker
  6. Java中Socket通信-客户端向服务端发送照片
  7. 使用Docker Compose 部署Nexus后初次登录账号密码不正确,并且在nexus-data下没有admin.password
  8. Pytyon3中实现十进制转不同进制
  9. SSM+BJUI实现添加和编辑共用一个页面
  10. 使用 Gitee 进行代码管理(包括本地仓库如何同时关联Git和Gitee)