用Socket編寫TCP程式(C C )

2021-09-06 08:40:44 字數 2842 閱讀 2536

用socket編寫tcp程式(c/c++) - linux wiki

此頁由linux wiki使用者

chenxing於2023年10月12日 (星期日) 07:42的最後更改。

本文介紹利用linux下的c語言socket函式建立tcp連線,相容c++。

利用tcp連線,可以進行http、ftp等常見協議的資訊傳輸,是linux網路程式設計的重要部分。

[隱藏]

進行網路程式設計,通常需要引用如下標頭檔案

#include 

#include

#include

#include

#include

#include

//以下標頭檔案是為了使樣例程式正常執行

#include

#include

#include

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)//設定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)

至此,與伺服器端的連線已建立,通訊方法見最後一部分。

本段是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

)// 讓serversocket開始監聽,客戶佇列長為5

rc = listen(serversocket, 5);

if(rc ==-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);
取自「

2個分類:

網路程式設計

| c/c++程式設計

用c編寫cgi程式

cgi的工作原理介紹 cgi common gateway inte ce 是乙個web伺服器提供資訊服務的標準介面,通過這樣乙個介面,web伺服器能夠執行程式,並將程式輸出的資訊返回給瀏覽器。因為在web網上的資料都是靜態的,通過cgi程式能夠動態的處理瀏覽者的請求,如儲存使用者輸入的資訊,根據使...

Python 使用socket編寫TCP服務程式

使用socket編寫tcp服務程式 by 鄭瑞國 1 引用網路模組socket 2 建立乙個tcp網路套接字s 3 繫結本機ip位址和指定埠號 4 開始監聽 5 接受連線 6 接受資訊 import socket 1 引用網路模組socket s socket.socket socket.af in...

TCP時間獲取socket程式

客戶伺服器設計正規化之迭代伺服器,不過這種伺服器使用範圍很有限,因為這種伺服器無法處理已等待服務的新使用者。include include see notes include include include include int main int argc char argv if sockfd ...