【Socket】linux套接字技术之tcp
1.mystery引入
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[];
- int iDataNum ;
- if((serverSocket = socket(AF_INET,SOCK_STREAM,)) < )
- {
- perror("socket");
- exit();
- }
- 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)) < )
- {
- perror("connect");
- exit();
- }
- if(listen(serverSocket,)<)
- {
- perror("listen");
- exit();
- }
- while()
- {
- client = accept(serverSocket,(struct sockaddr *)&clientAddr,(socklen_t*)&addr_len);
- if(client < )
- {
- perror("accept");
- continue;
- }
- iDataNum = recv(client,buffer,,);
- if(iDataNum < )
- {
- 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),);
- }
- }
- //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[];
- char recvbuf[];
- if((clientSocket=socket(AF_INET,SOCK_STREAM,)) < )
- {
- perror( "socket error" );
- return -;
- }
- serverAddr.sin_family=AF_INET;
- serverAddr.sin_port=htons();
- serverAddr.sin_addr.s_addr=inet_addr("127.0.0.1");
- if(connect(clientSocket,( struct sockaddr * )&serverAddr,sizeof(serverAddr)) < )
- {
- perror("connect");
- exit();
- }
- printf("connect with destination host.....\n");
- while()
- {
- printf("Input your World:>");
- scanf("%s",sendbuf);
- printf("\n");
- if(strcmp(sendbuf,"quit") == )
- break;
- send(clientSocket,sendbuf,sizeof(sendbuf),);
- recv(clientSocket,recvbuf,,);
- printf("recv data of my world is: %s\n",recvbuf);
- }
- close(clientSocket);
- return ;
- }
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的更多相关文章
- socket - Linux 套接字
总览 #include <sys/socket.h> mysocket = socket(int socket_family, int socket_type, int protocol) ...
- python 全栈开发,Day33(tcp协议和udp协议,互联网协议与osi模型,socket概念,套接字(socket)初使用)
先来回顾一下昨天的内容 网络编程开发架构 B/S C/S架构网卡 mac地址网段 ip地址 : 表示了一台电脑在网络中的位置 子网掩码 : ip和子网掩码按位与得到网段 网关ip : 内置在路由器中的 ...
- Linux套接字编程
网络中的进程是如何通信的? 在网络中进程之间进行通信的时候,那么每个通信的进程必须知道它要和哪个计算机上的哪个进程通信.否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行 ...
- iOS - Socket 网络套接字
1.Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个 Socket.Socket 又称 "套接字",应用程序通常通过 "套接字& ...
- Win2 Socket(套接字)相关 API
Socket(套接字) 作者信息 肖进 单位:南京中萃食品有限公司 资讯部 邮箱:xiaoj@njb.swirebev.com 电话:025-58642091 与socket有关的一些函数介绍 1.读 ...
- linux 套接字编程入门--Hello World
下述代码是linux套接字编程的入门代码.分为服务端和客户端源码. 服务端代码的主要流程是绑定ip地址和端口号建立套接字,等待客户端发起访问.接受客户端请求之后,向客户端发送字符串"hell ...
- Linux 套接字编程中的 5 个隐患(转)
本文转自IBM博文Linux 套接字编程中的 5 个隐患. “在异构环境中开发可靠的网络应用程序”. Socket API 是网络应用程序开发中实际应用的标准 API.尽管该 API 简单,但是开发新 ...
- 【 Linux 】Linux套接字简要说明
Linux套接字 源IP地址和目的IP地址以及源端口和目标端口号的组合称为套接字.其作用于标识客户端请求的服务器和服务. 套接字,支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间 ...
- Linux 套接字与文件描述符
端口和套接字,用于确定指定主机上的哪个本地进程使用了哪个协议和哪台远程主机上的哪个进程进行了通信.端口和套接字的使用可以基于以下几点: ①为每个应用过程分配一个过程标识符(Process ID),每次 ...
随机推荐
- 设置树莓派SSH连接因超时闲置断开(转)
设置树莓派SSH连接因超时闲置断开 转自:http://shumeipai.nxez.com/2013/12/06/set-ssh-connection-is-disconnected-due-to- ...
- atime,mtime,ctime 的理解
Linux之atime,mtime,ctime from:http://blog.sina.com.cn/s/blog_5980699f0100zkgz.html 首先可以使用stat 命令来查询文件 ...
- 【C#】反编译C#应用程序
下面的使用的使用是笔者使用的一个简单的程序,就是弹出一个消息框. 这里通过 ildasm 反编译 应用程序得到 il 文件,然后对 il 文件进行修改,修改内容后,再通过ilasm编译为应用程序.il ...
- Swift 对象
1.对象 对象是类的具体化的东西,从抽象整体中具体化出的特定个体. 对象是一个动态的概念. 每一个对象都存在着有别于其他对象的属于自己的独特属性和行为. 对象的属性可以随着他自己的行为的变化而改变. ...
- log4j(五)——如何控制不同目的地的日志输出?
一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述 二:老规矩,先来个栗子,然后再聊聊感受 import org.apache.log4j.*; import java.io ...
- eclipse导入class文件
右键src文件夹->build path->config build path->library->add class folder->create new folder ...
- C# 连接 mySQL 出现 GUID 应包含带 4 个短划线的 32 位数 问题
C# 连接 mySQL 出现 GUID 应包含带 4 个短划线的 32 位数 问题 在连接字符串中加入 Old Guids=true; 如:server=localhost;userid=root;p ...
- mvc 文件压缩 减少文件大小
using System; using System.Collections.Generic; using System.IO.Compression; using System.Linq; usin ...
- sql改写or 改成union不等价数据变多
select count(*) from (SELECT A.* FROM (SELECT CD.*, nvl(CV.SUM_CI_BALANCE, 0) as SUM_CI_BALANCE, nvl ...
- 坑爹的高德地图API
症状 ld: '-[MASearch poiSearchWithOption:]' in *****/Release-iphonesimulator/libMASearchKit.a(MASearch ...