- 浏览: 483773 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 7651.为什么基类的析构函数是虚函数? 在实现多态时,当用基 ... -
#pragma 用法
2014-09-01 13:20 7891. #pragma comment(lib,&quo ... -
Linux 使用共享内存
2014-07-28 17:02 6381. 共享内存与消息队列的区别 消息队列在实现消息的收发时, ... -
Select Poll and EPoll
2014-07-28 14:46 295... -
GDB 调试
2014-06-13 09:56 873http://wiki.ubuntu.org.cn/%E7%9 ... -
采用Makefile编译C++ 多个文件
2014-06-12 14:00 129641. 假设我们下面几个c++文件 wherewhen.h ... -
Linux gcc 编译生成动态和静态库
2014-04-28 14:26 602一、基本概念 1.1什么是库 在windows平台和lin ... -
Std::Map
2014-04-08 15:23 8751. map中的元素其实就是 ... -
Linux epoll
2014-03-13 14:34 569int edfd = epoll_create(int siz ... -
常用的头文件
2014-02-25 10:29 6891. printf,snprintf need #inclu ... -
虚函数的几个误区
2013-12-16 17:54 684纯虚函数 1. C++ 子类没有实现父类的纯虚函数,则子类也 ... -
虚函数,纯虚函数,抽象类
2013-09-22 10:01 1064定义一个函数为虚函数,不代表函数为不被实现的函数。 定义他为虚 ... -
虚基类,虚函数,虚析构函数
2013-09-22 09:36 901继承的类的前面加上virt ... -
C++基础知识 -数组,指针与字符串
2013-09-10 20:00 11081. 数组 声明: int A[10],B[10] ... -
C++基础知识
2013-09-07 21:03 7851. typedef 自定义数据类型,就是给已有数据类型起一 ... -
记录日志
2013-09-03 05:25 835openlog syslog closelog exampl ... -
Linux C 常用函数
2013-09-03 05:17 7781. Linux 常用C函数 http://man.chin ... -
Linux 内存检查
2013-08-27 09:56 813在Linux下些C语言程序,最大的问题就是没有一个好的编程ID ... -
RTP网络视频传输
2013-08-17 07:02 1071http://javahigh1.iteye.com/blog ... -
ldconfig
2013-08-15 15:45 0如何设置自己的共享库目录?/etc/ld.so.conf下增加 ...
相关推荐
socket同步套接字基础服务器、同步套接字客户端程序,即聊天程序,测试已成功!
3.1 套接字基础与UDP通信 (源代码见附件) 实验原理: 基于UDP的无连接客户/服务器在Python实现中的工作流程如下: 1.首先在服务器端通过调用socket()创建套接字来启动一个服务器; 2.服务器调用bind()指定服务器的...
在Windows操作系统中,线程是指系统中最小的功能执行单元,其可以独立的完成某一项功能。所以在进行Windows编程中,如果用户使用多线程处理某个功能...在本章中,将向用户介绍使用多线程处理异步套接字编程的相关方法。
关于socket套接字的编程视频,内容详细,非常适合新手学习,还在等什么呢,快来观看吧。
该程序使用Socket类的Bind 方法绑定本地主机,使用Listen方法监听端口,使用Accept 接收连接请求,用NetWorkStream类的Read方法读取数据,用Write方法发送数据,用Thread 类的Start方法实现线程同步,采用BigEndian...
在本实验中,将学习Python中TCP连接的套接字编程的基础知识:如何创建套接字,将其绑定到特定的地址和端口,以及发送和接收HTTP数据包。你还将学习一些HTTP首部格式的基础知识。 你将开发一个处理一个HTTP请求的Web...
用Python实现基于UDP协议的套接字,分为服务端和客户端源码,两者可以通过套接字进行收发消息。
网络套接字编程\计算机网络基础\套接字概述\套接字函数\MFC套接字编程
计算机网络实验四(套接字及客户服务器应用程序基础)的完整、可运行的源代码。 实现的是一个点对点聊天的实用程序,开发语言为Java。实现了登录、公聊、私聊等功能。
套接字,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能...
基于基础的网络套接字编程,简单的服务端发送倒计时间,客户端接收,与服务端同步
1、利用数据报套接字编写回射服务器和客户端。 2、使用类的形式封装服务器和客户端的网络功能框架,提高程序的适用性。 3、在编程框架的基础上扩展程序功能,测试网络丢包率。
一篇讲Java Socket套接字的小文章,不过里面讲的还不错。对于像学习Java Socket基础的人来说可以下载看看,我也顺便挣点分。 :)
Socket即套接字 java.net包的客户端Socket,服务端ServerSocket; 单线程套接字客户端和服务端的处理; 服务端多线程处理客户端套接字; 带有线程池处理客户端套接字; 不会Socket,有Java基础就能完全理解Socket...
全书内容包括准备开发环境、TCP/IP基本介绍、Windows套接字基础、协议特征、基本TCP套接字编程、基本UDP套接字编程、套接字选项、套接字阻塞模式开发、套接字非阻塞模式开发、Select模型开发、WSAAsyncSelect模型...
第3章 套接字基础 第4章 TCP套接字 第5章 UDP套接字 第三部分 Unix网络编程实用技术 第6章 并发服务器 第7章 名字和IP地址转换 第8章 同步及进程间通信 第9章 异常处理 第10章 创建实用套接字类库 第四...
网络通信 套接字 socket 代码 包括客户端和服务端 是socket学习的基础
绝对可用,为MFC的网络套接字客户端和服务器程序,有助于初学者学习,并以此为基础开发程序~0分放送~~~
在前三个实验的基础上,将其改造为一个能传输指定文件名称的点对点文件传输软件 设计并实现一个支持多个客户端的文件传输服务器 客户端等待键盘输入文件名称,然后将文件名称传输给服务器,服务器在预先设置好的...
MFC套接字编程(服务端+客户端),大学作业,已测,可用。有助于初学者学习,并在此基础上进行改进。能够显示从客户端接收到的信息及服务端自己发送的消息。