日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

用Socket编写TCP程序(C/C++)(转)

發布時間:2024/10/12 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用Socket编写TCP程序(C/C++)(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文介紹利用Linux下的C語言Socket函數建立TCP連接,兼容C++。

利用TCP連接,可以進行HTTP、FTP等常見協議的信息傳輸,是Linux網絡編程的重要部分。

目錄

[隱藏]
  • 1?需要引用的頭文件
  • 2?客戶端程序
  • 3?服務器端程序
  • 4?通信方法
    • 4.1?發送信息
    • 4.2?接收信息
    • 4.3?關閉連接

需要引用的頭文件

進行網絡編程,通常需要引用如下頭文件

#include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <unistd.h>//以下頭文件是為了使樣例程序正常運行 #include <string.h> #include <stdio.h> #include <stdlib.h>

客戶端程序

struct sockaddr_in pin; struct hostent *nlp_host; int sd; char host_name[256]; int port;//初始化主機名和端口。主機名可以是IP,也可以是可被解析的名稱 strcpy(host_name,"www.linux-wiki.cn"); port=80;//解析域名,如果是IP則不用解析,如果出錯,顯示錯誤信息 while ((nlp_host=gethostbyname(host_name))==0){printf("Resolve Error!\n"); }//設置pin變量,包括協議、地址、端口等,此段可直接復制到自己的程序中 bzero(&pin,sizeof(pin)); pin.sin_family=AF_INET; //AF_INET表示使用IPv4 pin.sin_addr.s_addr=htonl(INADDR_ANY); pin.sin_addr.s_addr=((struct in_addr *)(nlp_host->h_addr))->s_addr; pin.sin_port=htons(port);//建立socket sd=socket(AF_INET,SOCK_STREAM,0);//建立連接 while (connect(sd,(struct sockaddr*)&pin,sizeof(pin))==-1){printf("Connect Error!\n"); }

至此,與服務器端的連接已建立,通信方法見最后一部分。

服務器端程序

本段是C++代碼。

int serverSocket; struct sockaddr_in serverAddr; struct sockaddr_in clientAddr;// 用port保存使用的端口 int port=8000;// 建立Socket,并設置 serverSocket = socket(AF_INET, SOCK_STREAM, 0);// 設置socket選項,這是可選的,可以避免服務器程序結束后無法快速重新運行 int val=1; setsockopt(serverSocket, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val));// 定義端口和監聽的地址 serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(port); serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); memset(&(serverAddr.sin_zero), 0, 8); int rc = bind(serverSocket, (struct sockaddr*) &serverAddr,sizeof(struct sockaddr)); if (rc == -1) {printf("Bad bind\n");exit(1); }// 讓serverSocket開始監聽,客戶隊列長為5 rc = listen(serverSocket, 5); if (rc == -1) {printf("Bad listen\n");exit(1); }// 等待客戶連接 int sock; int clientAddrSize = sizeof(struct sockaddr_in); sock = accept(serverSocket,(struct sockaddr*) &clientAddr,(socklen_t*) &clientAddrSize);

這樣,連接就已建立,返回的sock就是一個新的socket,可以用來通信。

?

通信方法

發送信息

send(int sd,char * data,int len,0);

其中sd是socket變量名(文件描述符),data是數據緩沖區的地址,len是緩沖區的大小,0通常無需更改

接收信息

recv(int sd,char * buf,int maxlen,0);

關閉連接

close(int sd);

轉自:http://linux-wiki.cn/wiki/zh-hans/%E7%94%A8Socket%E7%BC%96%E5%86%99TCP%E7%A8%8B%E5%BA%8F%EF%BC%88C/C%2B%2B%EF%BC%89


--------------------------------------------------------------------自學筆記-------------------------------------------------------------------- //創建Socketint sd = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in address;//設置pin變量,包括協議、地址、端口等bzero(&address, sizeof(address));address.sin_family = AF_INET; //AF_INET表示使用IPv4address.sin_addr.s_addr = inet_addr(MY_HOST);address.sin_port = htons(MY_PORT);//建立TCP連接int ret = connect(sd, (struct sockaddr*)&address, sizeof(address));//連接失敗if (ret == -1){close(sd);return false;}//發送信號char* sigUsr1 = "signal SIGUSR1";write(sd, sigUsr1, sizeof(sigUsr1));//關閉連接 close(sd);return true;

?

轉載于:https://www.cnblogs.com/veins/p/3153491.html

總結

以上是生活随笔為你收集整理的用Socket编写TCP程序(C/C++)(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。