当前位置:首页 » 编程语言 » 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函数有个阻塞模式,不知怎样才能把它设置为阻塞模式

默认情况下就是阻塞模式了

热点内容
文件上传ui 发布:2024-04-28 04:07:14 浏览:482
我的世界pe登服务器 发布:2024-04-28 04:05:58 浏览:670
如何监控数据库 发布:2024-04-28 03:44:07 浏览:28
测温一体机怎么配置 发布:2024-04-28 03:11:56 浏览:591
大生活迅雷下载ftp 发布:2024-04-28 03:11:09 浏览:511
python如何生成随机数 发布:2024-04-28 02:21:59 浏览:169
小雨游戏解说我的世界服务器 发布:2024-04-28 02:08:12 浏览:877
安卓怎么删除账户 发布:2024-04-28 02:06:50 浏览:829
内存解压缩 发布:2024-04-28 01:58:10 浏览:867
三星存储卡防伪 发布:2024-04-28 01:50:59 浏览:277