- 浏览: 498615 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (339)
- C# (2)
- Java集合 (7)
- Java设计模式 (15)
- Java基础 (31)
- Java-Spring (7)
- Java-Spring AOP (9)
- Java-Spring Transaction (6)
- Java-Hibernate (13)
- Jsp (7)
- JSTL (2)
- 加密解密 (13)
- sql (3)
- 数据库技术 (7)
- JQuery (2)
- css (3)
- JavaScript (19)
- Linux (34)
- 项目管理 (5)
- Tomcat (5)
- Oracle (4)
- axis2 (5)
- Linux c/c++ (40)
- Linux 防火墙及抓包分析 (10)
- Linux 环境配置 (3)
- Linux 高级命令 (14)
- Linux Server 配置 (9)
- c++ 内存管理 (4)
- JUnit (1)
- SSL 通信 (2)
- windows 系统调试 (8)
- 字符串处理 (8)
- 排序算法 (7)
- ACE (1)
- IT技术 (1)
- 敏捷开发 (1)
- TCPIP (4)
- 汇编语言 (7)
- STL (2)
- Struts (1)
- iBatis (3)
- 音视频开发 (2)
- Java多线程 (3)
- 架构设计 (2)
- Java网络编程 (1)
- Ubantu (0)
- Eclipse (2)
最新评论
-
df270464278:
请问博主有遇到中文乱码的问题吗?就是json字符串里面包含中文 ...
cur发送json字符串, post 请求 -
ykbj117:
你们知道刘绍华么?就是北邮的一个教授,专门研究WebRTC的资 ...
WebRTC -
隐形的翅膀:
不会用powershell
去除SVN标志 -
lengbamboo:
改注册表比较危险,给个powershell的脚本:powers ...
去除SVN标志 -
hedong56:
[/b][b][i][/i][u][/u][flash=20 ...
JAVASCRIPT定义对象的四种方式
1.
int socket(int domain,int type, int protocol)
int sockfd=socket(,,,);
返回文件描述符,-1 表示错误
需要头文件: <sys/types.h> <sys/socket.h>
domain : AF_INET,PF_INET,AF_INET6, IPv4 or IPV6
type:SOCK_STREAM, SOCK_DGRAM, tcp or udp
protocol: 通常默认为0, 表示系统自动选择合适的协议类型
2. IPV4套接字地址
struct sockaddr_in{
sa_family_t sin_family;
uint16_t sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[8];
};
struct in_addr{
uint32_t s_addr;
}
3. int connect(int sockfd,const struct sockaddr *servaddr,socklen_t addrlen)
0表示成功,-1表示失败, 非阻塞函数,立即返回
4. int listen(int sockfd,int backlog)
backlog 参数是指完成TCP三次握手后已经成功建立TCP连接的队列的长度,服务器执行ACCEPT操作从该队列中取下一个连接进行后续处理,BACKLO的默认值是128
5. int accept (int sockfd,struct sockaddr *cliaddr,socklen_t *addrlen);
TCP服务器使用ACCEPT 函数从BACKLOG队列中返回下一个成功建立的连接), 如果BACKLOG队列为空,则服务器进程将被阻塞
如果该函数调用成功,它的返回值是一个新的套接字描述符,称为连接套接字,服务器使用该套接字和亿建立的客户端进行通信,而原有的监听套接字继续接受后续新客户端发来的连接请求
6. 其它
read/write/: TCP 连接用的函数
recvfrom/sendto UDP, 数据包套接字用到的函数
7.
if (listen(sockfd,128) == -1)
....
while(1){
if((new_fd = accept()) == -1)
....
for(;;)
{
len= read()
if(len>0)
处理读到的数据
}
}
此种模式下服务器只能对所接受到的一个客户端的连接请求进行处理,不能太接受其它客户端的连接请求,只有处理完,才能处理下一个请求
7. 使用子进程来出来
if (listen(sockfd,128) == -1)
....
while(1){
if((new_fd = accept()) == -1)
....
pid=fork()
switch(pid)
case :0 子进程
read
处理读入数据
}
高级套接字
8. setsockopt(int sockfd,int level,int optname,const void *optval,socklen_t optlen)
level: SOL_SOCKET, SOL_TCP
a SO_KEEPALIVE: 若在两小时内TCP连接双方没有发送过任何数据,自动向对方发送活动探测,并且接受方必须回应
b SO_RECVBUF SO_SNDBUF 调整发送缓存区和接受缓存区的大小
c SO_RCVLOWAT SO_SNDLOWAT 最低接收阀值和最低发送阀值
d SO_REUSEADDR : 服务器再次绑定到一个端口,无需等待。
9.
文件描述符
FD_ZERO(fd_set *fdset); 清空
FD_SET(int fd,fd_set *fdset); 添加
FD_CLR(int fd,fd_set *fdset); 删除某个
FD_ISSET(int fd,fd_set *fdset); 坚持某个是否被置位
fd_set rfds,orfds;
FD_ZERO(&orfds);
FD_SET(STDIN_FILENO,&orfds);
maxfd=STDIN_FILENO;
FD_SET(STDIN_FILENO,&orfds);
if((sockfd > maxfd)
maxfd=sockfd
rfds=orfds;
用SELECT 开始等待可读文件描述符集合可用的通知
ret = select(maxfd+1,&rfds,NULL,NULL,NULL)
if(ret == -1)
error
else
for(int i = 0; i < MAX_CONNECTION; i++)
{
if(FD_ISSET(sockfd,,&rfds)
read...
else if(FD_ISSET(STDIN_FILENO,&rfds)
write...
}
缺点
_FD_SETSIZE 最大值为1024, 若修改,需要重新编译内核,需要轮询
当使用FD_ISSET时, 需要遍历所有集合
int socket(int domain,int type, int protocol)
int sockfd=socket(,,,);
返回文件描述符,-1 表示错误
需要头文件: <sys/types.h> <sys/socket.h>
domain : AF_INET,PF_INET,AF_INET6, IPv4 or IPV6
type:SOCK_STREAM, SOCK_DGRAM, tcp or udp
protocol: 通常默认为0, 表示系统自动选择合适的协议类型
2. IPV4套接字地址
struct sockaddr_in{
sa_family_t sin_family;
uint16_t sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[8];
};
struct in_addr{
uint32_t s_addr;
}
3. int connect(int sockfd,const struct sockaddr *servaddr,socklen_t addrlen)
0表示成功,-1表示失败, 非阻塞函数,立即返回
4. int listen(int sockfd,int backlog)
backlog 参数是指完成TCP三次握手后已经成功建立TCP连接的队列的长度,服务器执行ACCEPT操作从该队列中取下一个连接进行后续处理,BACKLO的默认值是128
5. int accept (int sockfd,struct sockaddr *cliaddr,socklen_t *addrlen);
TCP服务器使用ACCEPT 函数从BACKLOG队列中返回下一个成功建立的连接), 如果BACKLOG队列为空,则服务器进程将被阻塞
如果该函数调用成功,它的返回值是一个新的套接字描述符,称为连接套接字,服务器使用该套接字和亿建立的客户端进行通信,而原有的监听套接字继续接受后续新客户端发来的连接请求
6. 其它
read/write/: TCP 连接用的函数
recvfrom/sendto UDP, 数据包套接字用到的函数
7.
if (listen(sockfd,128) == -1)
....
while(1){
if((new_fd = accept()) == -1)
....
for(;;)
{
len= read()
if(len>0)
处理读到的数据
}
}
此种模式下服务器只能对所接受到的一个客户端的连接请求进行处理,不能太接受其它客户端的连接请求,只有处理完,才能处理下一个请求
7. 使用子进程来出来
if (listen(sockfd,128) == -1)
....
while(1){
if((new_fd = accept()) == -1)
....
pid=fork()
switch(pid)
case :0 子进程
read
处理读入数据
}
高级套接字
8. setsockopt(int sockfd,int level,int optname,const void *optval,socklen_t optlen)
level: SOL_SOCKET, SOL_TCP
a SO_KEEPALIVE: 若在两小时内TCP连接双方没有发送过任何数据,自动向对方发送活动探测,并且接受方必须回应
b SO_RECVBUF SO_SNDBUF 调整发送缓存区和接受缓存区的大小
c SO_RCVLOWAT SO_SNDLOWAT 最低接收阀值和最低发送阀值
d SO_REUSEADDR : 服务器再次绑定到一个端口,无需等待。
9.
文件描述符
FD_ZERO(fd_set *fdset); 清空
FD_SET(int fd,fd_set *fdset); 添加
FD_CLR(int fd,fd_set *fdset); 删除某个
FD_ISSET(int fd,fd_set *fdset); 坚持某个是否被置位
fd_set rfds,orfds;
FD_ZERO(&orfds);
FD_SET(STDIN_FILENO,&orfds);
maxfd=STDIN_FILENO;
FD_SET(STDIN_FILENO,&orfds);
if((sockfd > maxfd)
maxfd=sockfd
rfds=orfds;
用SELECT 开始等待可读文件描述符集合可用的通知
ret = select(maxfd+1,&rfds,NULL,NULL,NULL)
if(ret == -1)
error
else
for(int i = 0; i < MAX_CONNECTION; i++)
{
if(FD_ISSET(sockfd,,&rfds)
read...
else if(FD_ISSET(STDIN_FILENO,&rfds)
write...
}
缺点
_FD_SETSIZE 最大值为1024, 若修改,需要重新编译内核,需要轮询
当使用FD_ISSET时, 需要遍历所有集合
发表评论
-
C++析构函数为什么要为虚函数
2015-10-28 16:57 8031.为什么基类的析构函数是虚函数? 在实现多态时,当用基 ... -
#pragma 用法
2014-09-01 13:20 8831. #pragma comment(lib,&quo ... -
Linux 使用共享内存
2014-07-28 17:02 6621. 共享内存与消息队列的区别 消息队列在实现消息的收发时, ... -
Select Poll and EPoll
2014-07-28 14:46 323... -
GDB 调试
2014-06-13 09:56 915http://wiki.ubuntu.org.cn/%E7%9 ... -
采用Makefile编译C++ 多个文件
2014-06-12 14:00 130191. 假设我们下面几个c++文件 wherewhen.h ... -
Linux gcc 编译生成动态和静态库
2014-04-28 14:26 629一、基本概念 1.1什么是库 在windows平台和lin ... -
Std::Map
2014-04-08 15:23 9031. map中的元素其实就是 ... -
Linux epoll
2014-03-13 14:34 605int edfd = epoll_create(int siz ... -
常用的头文件
2014-02-25 10:29 7671. printf,snprintf need #inclu ... -
虚函数的几个误区
2013-12-16 17:54 757纯虚函数 1. C++ 子类没有实现父类的纯虚函数,则子类也 ... -
虚函数,纯虚函数,抽象类
2013-09-22 10:01 1109定义一个函数为虚函数,不代表函数为不被实现的函数。 定义他为虚 ... -
虚基类,虚函数,虚析构函数
2013-09-22 09:36 926继承的类的前面加上virt ... -
C++基础知识 -数组,指针与字符串
2013-09-10 20:00 11801. 数组 声明: int A[10],B[10] ... -
C++基础知识
2013-09-07 21:03 8121. typedef 自定义数据类型,就是给已有数据类型起一 ... -
记录日志
2013-09-03 05:25 865openlog syslog closelog exampl ... -
Linux C 常用函数
2013-09-03 05:17 7971. Linux 常用C函数 http://man.chin ... -
Linux 内存检查
2013-08-27 09:56 846在Linux下些C语言程序,最大的问题就是没有一个好的编程ID ... -
RTP网络视频传输
2013-08-17 07:02 1100http://javahigh1.iteye.com/blog ... -
ldconfig
2013-08-15 15:45 0如何设置自己的共享库目录?/etc/ld.so.conf下增加 ...
相关推荐
3.1 套接字基础与UDP通信 (源代码见附件) 实验原理: 基于UDP的无连接客户/服务器在Python实现中的工作流程如下: 1.首先在服务器端通过调用socket()创建套接字来启动一个服务器; 2.服务器调用bind()指定服务器的...
1. **TCP套接字基础** - TCP是一种传输层协议,位于OSI模型的第四层,与UDP(用户数据报协议)并存。 - TCP提供面向连接的服务,即在数据传输前,双方会建立一个可靠的连接。 - 三次握手是TCP连接建立的过程,...
1. **TCP套接字基础**: TCP是一种面向连接的、可靠的传输层协议,它保证了数据包按顺序无丢失地到达目的地。在Windows中,TCP套接字编程涉及创建套接字、绑定地址、监听连接请求、接受连接以及进行读写操作。 2. ...
1. **套接字基础**:介绍套接字的概念、类型和工作原理,如流式套接字(SOCK_STREAM,对应TCP)和数据报套接字(SOCK_DGRAM,对应UDP)。 2. **基本网络概念**:涵盖IP地址、端口号、DNS解析等基础知识,这是构建...
1. **套接字基础**:套接字是TCP/IP协议族的一部分,提供了进程间通信(IPC)的能力,特别适合于网络上的不同主机间的通信。在Windows平台上,通常使用Winsock API来实现套接字编程,它封装了Berkeley套接字接口。 ...
一、套接字基础 1. 套接字定义:套接字是网络上的两个进程间通信的端点,类似于电话线路上的两个电话机。套接字由两部分组成:IP地址和端口号。IP地址标识网络中的设备,端口号区分同一设备上的多个服务。 2. 类型...
1. **套接字基础**:涵盖套接字的创建、绑定、监听、连接和接受等基本操作。通过源代码,可以了解socket()、bind()、listen()、connect()和accept()等函数的具体用法。 2. **TCP/IP协议栈**:讲解了TCP和UDP这两种...
套接字基础 套接字是操作系统提供的编程接口,用于在网络中的不同进程间建立连接并进行数据交换。在C++中,通常使用Windows Socket API(Winsock)或Berkeley套接字来实现。CSocketDemo很可能基于这些API来构建它...
一、套接字基础 套接字是网络通信的基本单元,它提供了进程间通信的能力,允许两个或多个系统通过网络进行数据交换。在Windows中,通常使用Winsock库(Windows Socket API)来实现套接字编程。Winsock提供了一组与...
1. **套接字基础**:讲解了套接字的概念,它是进程间通信(IPC)的一种方式,特别是在网络环境中。书中详细介绍了不同类型的套接字,如流式套接字(SOCK_STREAM)、数据报套接字(SOCK_DGRAM)和原始套接字(SOCK_...
在IT领域,网络通信是不可或缺的一部分,而套接字(Socket)则是实现网络通信的基础组件。易语言,作为中国本土的编程语言,提供了一种简单易用的方式来处理网络通信问题,其中包括取封包套接字IP端口的操作。本文将...
1. **套接字基础**:套接字是进程间通信的一种方式,特别是在网络环境中。它提供了一种在不同主机之间建立连接并交换数据的机制。在C++中,我们通常使用`<sys/socket.h>`和`<netinet/in.h>`头文件来处理套接字。 2....
Socket同步套接字是网络编程中的重要概念,主要用于在不同计算机之间实现进程间通信(IPC)。在这个场景下,我们讨论的是一个基于Socket的同步服务器和客户端应用,它们通常用于实现简单的聊天程序。以下是对这些...
1. **Java套接字基础** Java套接字是Java网络编程的基础,分为ServerSocket和Socket两种类型。ServerSocket是服务器端使用的,用于监听特定端口,等待客户端连接;Socket是客户端使用的,用于与服务器建立连接并...
Socket套接字是Java编程语言中用于网络通信的核心组件,它是实现客户端-服务器模型的基础。在Java中,Socket和ServerSocket类提供了套接字编程的基本功能。本文将深入探讨Java套接字编程的相关知识点,包括Socket和...
1. **套接字基础**:套接字是网络通信中的基本概念,是进程间通信的一种方式。书中详细讲解了套接字的创建、类型(如流式套接字、数据报套接字和原始套接字)、属性设置以及套接字的生命周期。 2. **地址族与协议**...
套接字基础 套接字是应用程序与网络协议栈交互的接口,可以看作是网络上的通信端点。在C#中,`System.Net.Sockets`命名空间提供了`Socket`类来处理套接字操作。套接字分为两种类型:流式套接字(Stream Socket,...
**Qt套接字编程源码详解** 在软件开发中,网络通信是不可...总的来说,Qt套接字编程是实现跨平台网络应用的基础,通过学习其源码,开发者不仅可以提升技术水平,还能更好地运用到实际项目中,解决复杂的网络通信问题。
Winsock 套接字编程基础 Winsock 套接字是一种基本的网络编程技术,用于建立和管理网络连接。以下是 Winsock 套接字编程的基础知识点: 创建套接字 套接字是网络编程的基础单元,用于建立和管理网络连接。Winsock...