Socket编程 (一)
<<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访问。
                
            
        
浙公网安备 33010602011771号