`
memorymyann
  • 浏览: 271802 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
文章列表
一个简单的例子   java段(客户端) package udpclient; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class Main {     /**      * @param args      */     public static void main(String[] args) {         String sendContent = "hello world";   ...
一个小程序: //发送方 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <netinet/ip.h> #include <netinet/ip_icmp.h> #include <stdlib.h> #include <errno.h> #include <unistd.h> #include <stdio.h> #include <netdb.h& ...
原文出自:http://blog.csdn.net/ibiswang/archive/2006/03/07/617585.aspx   目录: 一、术语session 二、HTTP协议与状态保持 三、理解 cookie机制 四、理解session机制 五、理解javax.servlet.http.HttpSession 六、 HttpSession常见问题 七、跨应用程序 ...
HTTP请求头部样例: GET http://www.baidu.com/ HTTP/1.1 Accept: html/text Host: 220.181.6.175:80 Connection: Close   这是一个请求百度页面的头部。 属性和值的命名中间用:和空格隔开,结尾使用\r\n,头部结束使用\r\n\r\n GET表示采用GET方法,当然我们常见的还有POST等其他方法,具体每个方法的意义可以查看RFC文档(附件)。 http://www.baidu.com/请求URL的绝对地址,如果使用相对地址可以改为/或者/index.html.注:后面的/不能少。 H ...
如果想发送广播到目前为止只能使用AF_INET, SOCK_DGRAM,也就是说只能采用基于IPV4的UDP协议才能发送广播。   IP地址有32位组成,如果想向某个网段发送广播,只需要那个发送的IP地址的主机号改成全1即可。比如大家最常用的局域网内部广播,我的网络地址为192.168.1.xxx。因此我只需要发送地址改为192.168.1.255.另外路由不转发广播,也就是说:处于192.168.1.xxx网段的广播是不会发送到192.168.2.xxx网段上。这也是说主机192.168.1.221如果想发送192.168.2.xxx的广播是行不通的。   代码就很简单的,但是有点要注 ...
connect非阻塞套接口时候,一般使用在以下几种情况:   1.三路握手需要时间,这个要视具体的网络情况而定。当然也有可能失败。在三路握手的时候我们并不需要在原地等待三路握手的完成,可以用这些时间来 完成其它事情,然后当这些事情完成后,再去检测连接是否建立(也就是三路握手是否完成)。   2.可以用这种技术来同时建立多个连接。(WEB浏览器中很常用)。   3.connect超时需要很长时间才会通知,如果我们认为超过0.1秒以后就算超时(不管它是不是真的超时),这是就可以使用非阻塞式I/O结合 select来完成。   当采用非阻塞式I/O来使用connect时候,要判断一 ...

21.非阻塞I/O

设置一个I/O成为非阻塞很简单,只需要: int val = fcntl(sockfd, F_GETFL, 0); fcntl(sockfd, F_SETFL, val | O_NONBLOCK);   第一步是获取描述字原来的属性。第2步是为描述字增加O_NONBLOCK(非阻塞)属性。 fcntl包含在头文件fcntl.h中,同时记得带上头文件unistd.h。 这样的设置会影响套接字读写,比如调用read时候,如果是非阻塞描述字,read不会等待,而会立即返回。但不会影响select函数,也就是说如果你把描述字放在select中,不管描述字是阻塞还是非阻塞的,select函数都 ...
打开一个文件或者一个套接口,如果想把这个已经打开的文件和套接口的描述字传给其他的进程(仅限于本机),可以通过发送unix域的辅助数据来完成。当然如果这2个进程是父子进程,则问题要简单很多,因为子进程继承了父 ...
之前说过一些区别,但基本对我们编程来说没有太多影响,但以下几个方面是需要注意到的。 1.当调用connect时候,需要注意的是打开文件的权限。只有进程能够有足够的权限,connect才会能够返回。 2.当发现监听套接口的队列满的时候,会立刻返回一个ECONNREFUSED错误。而之前的TCP不会返回错误,TCP客户端会认为是SYN包丢失而多次向服务器发送SYN。 3.在UNIX域协议中,如果采用SOCK_DGRAM方式通信,在未绑定的套接口上不会捆绑一个路径名(UDP不同,没有执行bind的客户端,系统会自动分配一个地址和端口号),当然,如果只是发送数据,仍然可以成功,但是当想返回数据的时 ...
UNIX域协议并不是一个真正的协议族,它是用在同一台主机上进行客户服务器通信时,能够使用和不同主机上通信相同的API的一种方法。所以它只是用在同一台主机上2个进程间的通信,当然同一主机上2个进程通信的方式在unix下面有:信号,管道,共享内存。   unix域地址结构 struct sockaddr_un{   uint8_t sun_len;   sa_family_t sun_family;   char sun_path[104];  //与网络通信不同,网络中双方确认需要IP和端口号,而在同一台机器上的2个进程则不需要这么麻烦,如果写过管道通信的例子,则这里类似于管道,需要 ...
想对于之前的几个IO函数,recvmsg与sendmsg功能更为强大,当然用起来也更为复杂。 #include "sys/socket.h"   ssize_t recvmsg(int sockfd,  struct msghdr * msg, int flags); ssize_t sendmsg(int sockfd,  struct msghdr * msg, int flags); 成功时候返回读写 ...
最早使用的read与write函数,下面是几种提供额外功能的I/O函数。 1.recv与send函数 #include "sys/socket.h" ssize_t recv(int sockfd, void * buff, ssize_t nbytes, int flags) ssize_t send(int sockfd, void * buff, ssize_t nbytes, int flags) 错误返回-1,成 ...
前面提到过的服务器都占有控制终端。而有些进程并不需要控制终端。比如我们想写一个回射服务器(既从终端得到信息,然后将数据再返回给终端,基于UDP因为比较简单)。   其实这并算不上一个难题,在shell中只要在指令后加上&就可以使服务器成为一个守护进程(后台进程)。但这里还是通过代码自己来实现。   #include "stdio.h" #include "stdlib.h" #include "/programe/net/head.h" #include "syslog.h" #include ...

进程组 对话期

为了便于进程控制,于是就有了进程组,对话期的概念。   进程组:有一个或者多个进程组成。有一个组长进程,特点是组长进程PID等于组ID。一个进程可以通过调用setpgid设置自己或者子进程(未调用excv之前)的组。组起始去创造,终结于组最后一个成员离开(成员死亡或者转投其它组)。   对话期:由一个或者多个进程组组成。可以调用setsid创建一个新的对话期。如果该进程是个组长进程setsid会出错。   以上只是概念已经一些相关的API,这2个概念提出主要的作用体现在下面:   1.对话期可以有一个控制终端(当然也可以没有)。 2.对话期可以有一个前台进程组和若干个后台进程组 ...
UDP在调用sendto发送数据时候,如果发送目的地不可达(比如说服务器没有启动),sentdo函数不会错误返回。sendto函数正确返回仅表示接口输出队列上为IP数据包留出空间,但并不表示数据成功到达了目的地。这种错误称之为异步 ...
Global site tag (gtag.js) - Google Analytics