IPv6下網路程式設計例項
一、TCP socket ipv6與ipv4的區別
伺服器端原始碼如下:
- #include <stdio.h>
- #include <stdlib.h>
- #include <errno.h>
- #include <string.h>
- #include <sys/types.h>
- #include <netinet/in.h>
- #include <sys/socket.h>
- #include <sys/wait.h>
- #include <unistd.h>
-
#include <arpa/inet.h>
- #define MAXBUF 1024
- int main(int argc, char **argv)
- {
- int sockfd, new_fd;
- socklen_t len;
- /* struct sockaddr_in my_addr, their_addr; */// IPv4
- struct sockaddr_in6 my_addr, their_addr; // IPv6
- unsigned int myport, lisnum;
- char buf[MAXBUF + 1];
-
if (argv[1])
- myport = atoi(argv[1]);
- else
- myport = 7838;
- if (argv[2])
- lisnum = atoi(argv[2]);
- else
- lisnum = 2;
- /* if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1) { */// IPv4
- if ((sockfd = socket(PF_INET6, SOCK_STREAM, 0)) == -1) { // IPv6
-
perror("socket"
- exit(1);
- } else
- printf("socket created/n");
- bzero(&my_addr, sizeof(my_addr));
- /* my_addr.sin_family = PF_INET; */// IPv4
- my_addr.sin6_family = PF_INET6; // IPv6
- /* my_addr.sin_port = htons(myport); */// IPv4
- my_addr.sin6_port = htons(myport); // IPv6
- if (argv[3])
- /* my_addr.sin_addr.s_addr = inet_addr(argv[3]); */// IPv4
- inet_pton(AF_INET6, argv[3], &my_addr.sin6_addr); // IPv6
- else
- /* my_addr.sin_addr.s_addr = INADDR_ANY; */// IPv4
- my_addr.sin6_addr = in6addr_any; // IPv6
- /* if (bind(sockfd, (struct sockaddr *) &my_addr, sizeof(struct sockaddr)) */// IPv4
- if (bind(sockfd, (struct sockaddr *) &my_addr, sizeof(struct sockaddr_in6)) // IPv6
- == -1) {
- perror("bind");
- exit(1);
- } else
- printf("binded/n");
- if (listen(sockfd, lisnum) == -1) {
- perror("listen");
- exit(1);
- } else
- printf("begin listen/n");
- while (1) {
- len = sizeof(struct sockaddr);
- if ((new_fd =
- accept(sockfd, (struct sockaddr *) &their_addr,
- &len)) == -1) {
- perror("accept");
- exit(errno);
- } else
- printf("server: got connection from %s, port %d, socket %d/n",
- /* inet_ntoa(their_addr.sin_addr), */// IPv4
- inet_ntop(AF_INET6, &their_addr.sin6_addr, buf, sizeof(buf)), // IPv6
- /* ntohs(their_addr.sin_port), new_fd); */// IPv4
- their_addr.sin6_port, new_fd); // IPv6
- /* 開始處理每個新連線上的資料收發 */
- bzero(buf, MAXBUF + 1);
- strcpy(buf,
- "這是在連線建立成功後向客戶端傳送的第一個訊息/n只能向new_fd這個用accept函式新建立的socket發訊息,不能向sockfd這個監聽socket傳送訊息,監聽socket不能用來接收或傳送訊息/n");
- /* 發訊息給客戶端 */
- len = send(new_fd, buf, strlen(buf), 0);
- if (len < 0) {
- printf
- ("訊息'%s'傳送失敗!錯誤程式碼是%d,錯誤資訊是'%s'/n",
- buf, errno, strerror(errno));
- } else
- printf("訊息'%s'傳送成功,共傳送了%d個位元組!/n",
- buf, len);
- bzero(buf, MAXBUF + 1);
- /* 接收客戶端的訊息 */
- len = recv(new_fd, buf, MAXBUF, 0);
- if (len > 0)
- printf("接收訊息成功:'%s',共%d個位元組的資料/n",
- buf, len);
- else
- printf
- ("訊息接收失敗!錯誤程式碼是%d,錯誤資訊是'%s'/n",
- errno, strerror(errno));
- /* 處理每個新連線上的資料收發結束 */
- }
- close(sockfd);
- return 0;
- }
而“//IPv6” 表示這行程式碼是在IPv6網路裡用的,比較一下,會很容易看到差別的。
客戶端原始碼如下:
- #include <stdio.h>
- #include <string.h>
- #include <errno.h>
- #include <sys/socket.h>
- #include <resolv.h>
- #include <stdlib.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <unistd.h>
- #define MAXBUF 1024
- int main(int argc, char **argv)
- {
- int sockfd, len;
- /* struct sockaddr_in dest; */// IPv4
- struct sockaddr_in6 dest; // IPv6
- char buffer[MAXBUF + 1];
- if (argc != 3) {
- printf
-
相關推薦
IPv6下網路程式設計例項
一、TCP socket ipv6與ipv4的區別 伺服器端原始碼如下: #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h>
JNI入門教程1---Android studio 下JNI程式設計例項並生成so庫
參考地址: https://www.cnblogs.com/jymblog/p/5526865.html https://www.jianshu.com/p/a
解決Linux下網路程式設計(sendto send )出現 SIGPIPE 訊號導致程式異常終止的問題
引言 最近在Linux下網路程式設計時,出現SIGPIPE 訊號導致程式異常終止,本文記錄下解決的方法以及相應的知識。 SIGPIPE 訊號資料 什麼時候出現此訊號,APUE中有關此訊號的解釋如下: Linux man手冊有關此訊號的解釋: man 7 signal SI
java socket網路程式設計例項程式碼(含服務端和客戶端)
本程式碼為java socket網路程式設計例項程式碼,包括客戶端和服務端,實現客戶端傳送訊息,服務端接收並反饋訊息。 server.java為服務端程式碼。 client.java為客戶端程式碼。 服務端程式碼server.java: package socket;
linux環境下網路程式設計
參考 https://www.cnblogs.com/diligenceday/p/6241021.html https://blog.csdn.net/baidu_36649389/article/details/79081770 http://www.cnblogs
Linux下shell程式設計例項
1.用while語句建立一個根據輸入的數值求累加和(1+2+3+。。。。+n)的shell程式。 while 若干個命令列1 do 若干個命令列2 done 結構 #! /bin/b
QT網路程式設計例項
最終效果圖: -------------------------------------------------------------------------------------------------------- 注意:建好工程後在“.pro”檔案中加上“Qt
總結之linux下網路程式設計
1.有一篇好的文章,對Linux下socket程式設計的原理和要點說的很清楚: 2.一些windows網路程式設計的要點吧。包括大頭序,小頭序,網路位元組序。一些常用的函式等。。 3.《linux網路程式設計》宋斌寫的,這本書不錯。寫的清楚,容易懂。是一個比較好的參
linux 下網路程式設計結構體定義對應的標頭檔案
netinet/if_ether.h ether_arp的資料結構 netinet/ether.h 以太禎的網路位元組和ascii位元組的轉換,包括ether_ntoa(),ether_aton這樣的函式定義 netinet/ip.h 這個標頭檔案和linux/ip.h似乎很相似,也有iphd
UDP windows下socket程式設計例項
Server 端程式原始碼: #include <stdio.h> #include <Winsock2.h> void main() { SOCKET socket1; //InitWinsock(); WSADATA wsaData; int iErrorCode;
linux下網路程式設計
Linux的SOCKET程式設計詳解 1. 網路中程序之間如何通訊 進 程通訊的概念最初來源於單機系統。由於每個程序都在自己的地址範圍內執行,為保證兩個相互通訊的進 程之間既互不干擾又協調一致工作,作業系統為程序通訊提供了相應設施,如 UNIX
linux下c程式設計例項
linux下c程式設計使用gcc編譯器,下載gcc:sudo yum install -b gcc current 編寫程式 一、最簡單的helloword vi hello.c #include <stdio.h> int main() { print
(筆記)Linux下網路程式設計,採用TCP協議實現的C/S架構
TCP/UDP介紹 TCP(Transfer Control Protocol)傳輸控制協議是一種面向連線的協議, 當我們的網路程式使用這個協議的時候,可以保證我們的客戶端和服務端的通訊是可靠的,安全的,適合於傳輸大批量資料的情況. UDP(User Da
Linux下網路程式設計之自定義協議進行併發多客戶端與伺服器的通訊(多程序處理併發)不足佔用資源太多
自定義協議訊息體*********msg.h*************#ifndef _MSG_H_#define _MSG_H_struct msg{ char head[10]; //頭部 char msg_chck; //效驗碼 char buff[512];/
Linux 下 C 網路程式設計之 多執行緒通訊 例項
簡單示例,有不對的地方,歡迎指點。 伺服器端 /* ============================================================================ Name : sockThreadServer
網路程式設計基礎【day08】:簡單socket例項(二)
本節內容 1、概述 2、socket例項 3、總結 一、概述 之前我們只是介紹了soket的概念和一些邏輯圖表,下面我們來看看,socket的客戶端和服務端到底是怎麼用的? 二、socket例項 2.1 客戶端 2.1.1 客戶端程式碼邏輯圖 2.1.2 客戶端程式碼
Linux下網路socket程式設計——實現伺服器(select)與多個客戶端通訊
Linux下網路socket程式設計——實現伺服器(select)與多個客戶端通訊 置頂 2017年06月23日 14:44:37 閱讀數:3225 標籤: socket程式設計伺服器與多個客戶端通epoll多路複用C語言網路程式設計 更多
Qt:Qt實現Winsock網路程式設計—非阻塞模式下的簡單遠端控制的開發(WSAAsyncSelect)
Qt實現Winsock網路程式設計—非阻塞模式下的簡單遠端控制的開發(WSAAsyncSelect) 前言 這邊部落格應該是 Qt實現Winsock網路程式設計—TCP服務端和客戶端通訊(多執行緒) 的姐妹篇,上篇部落格中的socket通訊中所用的Windows api函式 都是
c++ 網路程式設計(九)TCP/IP LINUX/windows下 多執行緒超詳細教程 以及 多執行緒實現服務端
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <process.h> #include <winsock2.h> #include <win
c++ 網路程式設計(九)TCP/IP LINUX/windows下 多執行緒超詳細教程 以及 多執行緒實現服務端
原文作者:aircraft 原文連結:https://www.cnblogs.com/DOMLX/p/9661012.html 先講Linux下(windows下在後面可以直接跳到後面看): 一.執行緒基本概念 前面我們講過多程序伺服器,但我們知道它開銷很大