- 浏览: 271802 次
- 性别:
- 来自: 上海
最新评论
-
AndMacLinuXp:
试了下,不错!
printk内核调试 -
klose:
我引用你的文章,并做了简单的分析:这里贴出url:http:/ ...
linux系统调用fork, vfork, clone -
klose:
你上面提到的问题:free的问题。首先你可能疏忽了,stack ...
linux系统调用fork, vfork, clone -
qwe_rt:
HI ,非常nice的文章,在阅读过程中,我发现我的ubunt ...
linux手动添加开机启动的服务 -
suifeng:
谢谢分享, 受用中.
shell编程分支,循环
文章列表
一个简单的例子
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时候,要判断一 ...
设置一个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数据包留出空间,但并不表示数据成功到达了目的地。这种错误称之为异步 ...