<<Linux 网络编程>>摘要
注意: 其中的大部分成员是网络字节序(大端字节序);
编程:
服务器先要做的事情:
socket() 初始化Socket
bind() 绑定本地端口
listen() 监听端口
accept() 响应客户端请求
一个例子
客户端(Windows 系统, Java 环境)
public class xxx { private static String host = "www.mylinux.net"; private static int port = 8848; public static void main(String[] args) throws Throwable { Socket s = new Socket(); if (!s.isConnected()) { System.out.println("正在连接服务器..."); try { s.connect(new InetSocketAddress(host, port), 2000); } catch (IOException e) { System.out.println("连接超时!"); return; } System.out.println("连接成功!"); System.out.println(s); } }
服务器端(Linux 系统, glibc环境)
15 // socket 16 int sockfd = socket(AF_INET, SOCK_STREAM, 0); 17 if (sockfd == -1) { 18 perror("socket()"); 19 return ; 20 } 21 22 // bind 23 struct sockaddr_in addr = { 0 }; 24 addr.sin_family = AF_INET; 25 addr.sin_port = htons(8848); 26 //addr.sin_addr.s_addr = inet_addr("0.0.0.0"); 27 28 if (bind(sockfd, (void *)&addr, sizeof(struct sockaddr)) != EXIT_SUCCESS) { 29 perror("bind()"); 30 return ; 31 } 32 33 // listen 34 if (listen(sockfd, 5) != EXIT_SUCCESS) { 35 perror("listen()"); 36 return ; 37 } 38 39 // accept 40 accept(sockfd, NULL, NULL);
注意: bind() 过程中绑定地址不是本地回环地址 127.0.0.1, 而是 0x0, 这个IP相当于java中的this,代表当前设备的IP, 否则即使绑定成功了, 也只能在本地通过唯一IP访问。