當前位置:首頁 » 編程語言 » c語言send

c語言send

發布時間: 2022-09-27 22:25:30

c語言 send()函數理解

使用函數getsockopt獲得發送緩沖區的長度。用法如下:
int sockfd;
int val;
int len;
sockfd = socket (AF_INET, SOCK_STREAM, 0);
len = sizeof (val);
getsockopt( sockfd, SOL_SOCKET, SO_SNDBUF, &val, &len);
printf ("sndbuf len=%d\n", val);
在32位linux系統上發送緩沖區為16K ,可以使用setsockopt()修改,會影響網路性能

❷ C語言發送郵件

基本框架就是這,需要其他功能自己添加吧
C語言實現簡單的SMTP發送郵件
#include <windows.h>
#include <stdio.h>
#include <WinSock.h>
#include <iostream>
using namespace std;
#pragma comment(lib, "ws2_32.lib")

struct Base64Date6
{
unsigned int d4:6;
unsigned int d3:6;
unsigned int d2:6;
unsigned int d1:6;
};
// 協議中加密部分使用的是base64方法
char ConvertToBase64 (char c6);
void EncodeBase64 (char *dbuf, char *buf128, int len);
void SendMail (char *email,char *body);
int OpenSocket (struct sockaddr *addr);

int main()
{
char EmailTo[] = "[email protected]";
char EmailContents[] = "From: \"lucy\"<[email protected]>\r\n"
"To: \"dasiy\"<[email protected]>\r\n"
"Subject: Hello\r\n\r\n"
"Hello World, Hello Email!";
SendMail(EmailTo, EmailContents);
return 0;
}

char ConvertToBase64(char uc)
{
if(uc < 26)
{
return 'A' + uc;
}
if(uc < 52)
{
return 'a' + (uc - 26);
}
if(uc < 62)
{
return '0' + (uc - 52);
}
if(uc == 62)
{
return '+';
}
return '/';
}

// base64的實現
void EncodeBase64(char *dbuf, char *buf128, int len)
{
struct Base64Date6 *ddd = NULL;
int i = 0;
char buf[256] = {0};
char *tmp = NULL;
char cc = '\0';

memset(buf, 0, 256);
strcpy_s(buf, 256, buf128);
for(i = 1; i <= len/3; i++)
{
tmp = buf + (i-1)*3;
cc = tmp[2];
tmp[2] = tmp[0];
tmp[0] = cc;
ddd = (struct Base64Date6 *)tmp;
dbuf[(i-1)*4+0] = ConvertToBase64((unsigned int)ddd->d1);
dbuf[(i-1)*4+1] = ConvertToBase64((unsigned int)ddd->d2);
dbuf[(i-1)*4+2] = ConvertToBase64((unsigned int)ddd->d3);
dbuf[(i-1)*4+3] = ConvertToBase64((unsigned int)ddd->d4);
}
if(len % 3 == 1)
{
tmp = buf + (i-1)*3;
cc = tmp[2];
tmp[2] = tmp[0];
tmp[0] = cc;
ddd = (struct Base64Date6 *)tmp;
dbuf[(i-1)*4+0] = ConvertToBase64((unsigned int)ddd->d1);
dbuf[(i-1)*4+1] = ConvertToBase64((unsigned int)ddd->d2);
dbuf[(i-1)*4+2] = '=';
dbuf[(i-1)*4+3] = '=';
}
if(len%3 == 2)
{
tmp = buf+(i-1)*3;
cc = tmp[2];
tmp[2] = tmp[0];
tmp[0] = cc;
ddd = (struct Base64Date6 *)tmp;
dbuf[(i-1)*4+0] = ConvertToBase64((unsigned int)ddd->d1);
dbuf[(i-1)*4+1] = ConvertToBase64((unsigned int)ddd->d2);
dbuf[(i-1)*4+2] = ConvertToBase64((unsigned int)ddd->d3);
dbuf[(i-1)*4+3] = '=';
}
return;
}
// 發送郵件
void SendMail(char *email, char *body)
{
int sockfd = {0};
char buf[1500] = {0};
char rbuf[1500] = {0};
char login[128] = {0};
char pass[128] = {0};
WSADATA WSAData;
struct sockaddr_in their_addr = {0};
WSAStartup(MAKEWORD(2, 2), &WSAData);
memset(&their_addr, 0, sizeof(their_addr));

their_addr.sin_family = AF_INET;
their_addr.sin_port = htons(25);
hostent* hptr = gethostbyname("smtp.126.com");
memcpy(&their_addr.sin_addr.S_un.S_addr, hptr->h_addr_list[0], hptr->h_length);
printf("IP of smpt.126.com is : %d:%d:%d:%d\n",
their_addr.sin_addr.S_un.S_un_b.s_b1,
their_addr.sin_addr.S_un.S_un_b.s_b2,
their_addr.sin_addr.S_un.S_un_b.s_b3,
their_addr.sin_addr.S_un.S_un_b.s_b4);

// 連接郵件伺服器,如果連接後沒有響應,則2 秒後重新連接
sockfd = OpenSocket((struct sockaddr *)&their_addr);
memset(rbuf, 0, 1500);
while(recv(sockfd, rbuf, 1500, 0) == 0)
{
cout<<"reconnect..."<<endl;
Sleep(2);
sockfd = OpenSocket((struct sockaddr *)&their_addr);
memset(rbuf, 0, 1500);
}

cout<<rbuf<<endl;

// EHLO
memset(buf, 0, 1500);
sprintf_s(buf, 1500, "EHLO HYL-PC\r\n");
send(sockfd, buf, strlen(buf), 0);
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout<<"EHLO REceive: "<<rbuf<<endl;

// AUTH LOGIN
memset(buf, 0, 1500);
sprintf_s(buf, 1500, "AUTH LOGIN\r\n");
send(sockfd, buf, strlen(buf), 0);
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout<<"Auth Login Receive: "<<rbuf<<endl;

// USER
memset(buf, 0, 1500);
sprintf_s(buf, 1500, "[email protected]");//你的郵箱賬號
memset(login, 0, 128);
EncodeBase64(login, buf, strlen(buf));
sprintf_s(buf, 1500, "%s\r\n", login);
send(sockfd, buf, strlen(buf), 0);
cout<<"Base64 UserName: "<<buf<<endl;
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout<<"User Login Receive: "<<rbuf<<endl;

// PASSWORD
sprintf_s(buf, 1500, "XXXXXXXXXXXX");//你的郵箱密碼
memset(pass, 0, 128);
EncodeBase64(pass, buf, strlen(buf));
sprintf_s(buf, 1500, "%s\r\n", pass);
send(sockfd, buf, strlen(buf), 0);
cout<<"Base64 Password: "<<buf<<endl;

memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout<<"Send Password Receive: "<<rbuf<<endl;

// MAIL FROM
memset(buf, 0, 1500);
sprintf_s(buf, 1500, "MAIL FROM: <[email protected]>\r\n");
send(sockfd, buf, strlen(buf), 0);
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout<<"set Mail From Receive: "<<rbuf<<endl;

// RCPT TO 第一個收件人
sprintf_s(buf, 1500, "RCPT TO:<%s>\r\n", email);
send(sockfd, buf, strlen(buf), 0);
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout<<"Tell Sendto Receive: "<<rbuf<<endl;

// DATA 准備開始發送郵件內容
sprintf_s(buf, 1500, "DATA\r\n");
send(sockfd, buf, strlen(buf), 0);
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout<<"Send Mail Prepare Receive: "<<rbuf<<endl;

// 發送郵件內容,\r\n.\r\n內容結束標記
sprintf_s(buf, 1500, "%s\r\n.\r\n", body);
send(sockfd, buf, strlen(buf), 0);
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout<<"Send Mail Receive: "<<rbuf<<endl;

// QUIT
sprintf_s(buf, 1500, "QUIT\r\n");
send(sockfd, buf, strlen(buf), 0);
memset(rbuf, 0, 1500);
recv(sockfd, rbuf, 1500, 0);
cout<<"Quit Receive: "<<rbuf<<endl;

//清理工作
closesocket(sockfd);
WSACleanup();
return;
}
// 打開TCP Socket連接
int OpenSocket(struct sockaddr *addr)
{
int sockfd = 0;
sockfd=socket(PF_INET, SOCK_STREAM, 0);
if(sockfd < 0)
{
cout<<"Open sockfd(TCP) error!"<<endl;
exit(-1);
}
if(connect(sockfd, addr, sizeof(struct sockaddr)) < 0)
{
cout<<"Connect sockfd(TCP) error!"<<endl;
exit(-1);
}
return sockfd;
}

❸ c語言。sendbyte()函數

語法上看:
P2&=0xC0;//p2 與等於 0xc0,相當 P2 = P2&0XC0,

sendbyte(data1);//把data1變數作為參數傳給函數sendbyte,看函數名,似乎是要發送數據的樣子
P2|=0x01;//這句 相當於 P2 = P2|0X01,作用是將P2的最低位值1

❹ send是什麼意思

【基本釋義】send英 [send] 美 [sɛnd]

vt. 發送,寄;派遣;使進入;發射

vi. 派人;寄信

n. 上升運動

n. (Send)人名;(德)森德

[ 過去式 sent 過去分詞 sent 現在分詞 sending ]
【專業釋義及短語】
send [send]

vt.

1、打發,派遣,差遣,派…前去(請人等):
to send somebody to do something

2、派某人去做某事

to send (someone) for a doctor

3、派某人去請大夫

4、使前往;使進入(to ):
to send to the prison

進監獄

5、寄,發送(信件,郵包等):
to send a letter to somebody

6、投,擲;擊出:
to send a punch to the jaw

一拳擊在下巴上

7、使進入(某狀態);迫使(in, into):
to send someone into madness

8、使某人發瘋
9、指點:
to send someone to the police

指點某人去警察局

10、(上天)賜福給,降(福、禍等):
God send us!

上帝保佑!

11、[俚語]使高興,使…興奮:
It sends me into the sky.

這真令我飄飄欲仙。

12、散發出,放出(香味等):
to send forth a sweet odor

發出一股香味

【電子學】

vi.

派遣;發出,派人:
He was sent abroad.

他被派到了海外工作。

【電子學】發信號

adj.

[僅用作定語]用於發送的

短語:

1、God send it may not be so! 但願不是這樣!

2、send flying 攆走,解僱;使四散

3、send someone mad 令某人發瘋

4、send someone packing (或about his business) 解僱某人;攆走某人

5、send someone sprawling 把某人打倒在地

6、send someone to Coventry 見 Coventry

變形:

vt. sent . sending
send2 [send]

n., vi. sended 或sent, sending 【航海學】 = scend
【片語短語】
send out 發送;派遣;放出
send in 遞送;呈報;命…進來
send for 召喚,派人去叫;派人去拿
send back 送回;退還
send a message 發信息
【例句】

1、Please send the book along to me.

請快些把那本書寄給我。

2、You should come or send a representative at least.

你應該來,或者說,至少派一位代表來。

3、The dispute at the moment revolved about the question of whom to send.

當時的爭論是圍繞著派誰去好這一問題而進行的。

❺ C語言 socket編程 客戶端只send一次 但是伺服器會循環執行這條命令 在線等

recv(comm_socket,recv_buff, sizeof(recv_buff), 0); /*receiveclient's command*/

改成
int ret = recv(comm_socket,recv_buff, sizeof(recv_buff), 0); /*receiveclient's command*/

if ret == -1 || ret == 0
break

== -1 表示出錯, =0 表示 socket 已經關閉。

❻ send是什麼意思

1.sendsend英 [send] 美 [sɛnd]

vt.送;派遣;使作出(某種反應);使進入(某狀態)

vt.& vi.用無線電波發送,發出信息

vi.派遣,發出,派人

adj.[僅用作定語]用於發送

2.send是一個C語言函數,可以用於向窗口發送非PowerBuilder預定義事件的消息。

❼ C 語言socket 的send數據太大,最大能發送多少如何分批發送

是這樣,如果是UDP傳輸,一般就是1500左右。如果是TCP大小不一定,比如你要傳10000,有可能一次傳的量是小於10000的任意量。
為了解決這個問題,我建議你用阻塞的SOCKET ,TCP傳輸,用一個循環接收一個大數據包,每次接到多少位元組就將內存下表移動多少,在下次循環中繼續接受,直到傳完一個整包。

❽ C語言中SOCKET關於send和recv的問題,不懂別亂貼

說實在的這個問題非常簡單,不過你習慣太差,你把send和recv的返回值看看不就明白了!
前提是你描述的都是事實。
否則還可能有Socket問題。
如果是linux,strace一下就知道什麼問題了。
Windows的也很簡單。

前面的明顯不正確,send如果是TCP,(UDP 不應該用send),send返回時,消息已經發出了。

❾ 在C語言中send buff的用法

buff是數組名字,中文解釋是緩沖區,一般程序員習慣用buff在存放字元串。

❿ 用C語言編寫socket程序時,聽說send函數有個阻塞模式,不知怎樣才能把它設置為阻塞模式

默認情況下就是阻塞模式了

熱點內容
利用python進行數據分析pdf 發布:2024-03-28 20:33:36 瀏覽:559
php模擬post提交 發布:2024-03-28 20:23:14 瀏覽:541
phptxt下載 發布:2024-03-28 20:12:37 瀏覽:475
如何更衣櫃密碼鎖密碼設置 發布:2024-03-28 19:42:09 瀏覽:483
如何將一台電腦當雲伺服器嗎 發布:2024-03-28 19:22:39 瀏覽:882
銀行dsk密碼什麼意思 發布:2024-03-28 19:22:35 瀏覽:10
我的世界伺服器怎麼解除ban人 發布:2024-03-28 19:21:47 瀏覽:828
ss怎麼用安卓 發布:2024-03-28 18:51:39 瀏覽:688
腳本注入到其他軟體運行 發布:2024-03-28 18:30:02 瀏覽:721
網易我的世界皮膚能用到伺服器嗎 發布:2024-03-28 18:24:44 瀏覽:805