Socket例項1--POP3客戶端程式
與郵件伺服器互動的命令存在字串陣列POPMessage中,程式通過一個do-while迴圈依次傳送這些命令。
#include<stdio.h> <stdlib.h> <errno.h> <string.h> <netdb.h>
#include<sys/types.h> <netinet/in.h> <sys/socket.h>
#define POP3SERVPORT 110 #define MAXDATASIZE 4096
int main(int argc, char *argv[])
{
int sockfd;
char Serv_Host[] = "60.28.205.11";
struct hostent *host;
struct sockaddr_in serv_addr;
char *POPMessage[] = {
"USER huaying.xie/r/n", //回車換行
"PASS mypasswd/r/n",
"STAT/r/n",
"LIST/r/n",
"TOP 1/r/n",
"RETR 1/r/n",
//"DELE 1/r/n",
"QUIT/r/n",
NULL
};
int iLength;
int iMsg = 0;
//int iEnd = 0;
char buf[MAXDATASIZE];
if((host = gethostbyname(Serv_Host)) == NULL){
perror("gethostbyname error:");
exit(1);
}
if((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1){
perror("socket error:");
exit(1);
}
serv_addr.sin_family = PF_INET;
serv_addr.sin_port = htons(POP3SERVPORT);
serv_addr.sin_addr = *((struct in_addr *)host->h_addr);
bzero(&(serv_addr.sin_zero), 8);
if(connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1){
perror("connect error:");
exit(1);
}
do{
int iEnd = 0;
send(sockfd, POPMessage[iMsg], strlen(POPMessage[iMsg]), 0);
printf("have sent: %s", POPMessage[iMsg]);
//iLength = recv(sockfd, buf+iEnd, sizeof(buf)-iEnd, 0);
iLength = recv(sockfd, buf, sizeof(buf), 0);
iEnd += iLength;
buf[iEnd] = '/0';
printf("received: %s, %d/n", buf, iMsg);
iMsg++;
}while(POPMessage[iMsg]);
close(sockfd);
return 0;
}
POP3 命令簡介(網路整理)
POP3 (Post Office Protocol 3) 即郵局協議的第 3 個版本,它規定怎樣將個人計算機連線到 Internet 的郵件伺服器和下載電子郵件的電子協議。
它是因特網電子郵件的 第一個離線協議標準, POP3 允許使用者從伺服器上把郵件儲存到本地主機(即自己的計算機)上,同時刪除儲存在郵件伺服器上的郵件,而POP3伺服器則是遵循 POP3 協議的接收郵件伺服器,用來接收電子郵件的。
POP3 命令:(不區分大小寫)
USER username 認證使用者名稱
PASS password 認證密碼認證,認證通過則狀態轉換
APOP name,digest 認可一種安全傳輸口令的辦法,執行成功導致狀態轉換,請參見 RFC 1321 。
STAT 處理請求 server 回送郵箱統計資料,如郵件數、 郵件總位元組數
UIDL n 處理 server 返回用於該指定郵件的唯一標識, 如果沒有指定,返回所有的。
LIST n 處理 server 返回指定郵件的大小等
RETR n 處理 server 返回郵件的全部文字
DELE n 處理 server 標記刪除,QUIT 命令執行時才真正刪除
RSET 處理撤消所有的 DELE 命令
TOP n,m 處理返回 n 號郵件的前 m 行內容,m 必須是自然數
NOOP 處理 server 返回一個肯定的響應
QUIT 希望結束會話。如果 server 處於"處理" 狀態,則現在進入"更新"狀態,刪除那些標記成刪除的郵件。如果 server 處於"認可"狀態,則結束會話時 server 不進入"更新"狀態 。
使用telnet 連線 Mail Server 收信
telnet 60.28.205.40 110 ---使用 telnet 命令連線伺服器 110 埠
Trying 119.119.119.212... --- 正在連線伺服器 110 埠
Connected to 119.119.119.212. --- 連線伺服器 110 埠成功
+OK Winmail Mail Server POP3 ready
user username --- 輸入使用者名稱, username 為具體的使用者名稱 如:huaying.xie
+OK --- 執行命令成功
pass password --- 輸入使用者密碼,password 為具體的密碼
+OK 2 messages --- 密碼認證通過
(-ERR authorization failed --- 密碼認證失敗)
stat --- 郵箱狀態
+OK 2 6415 --- 2 為該信箱總郵件數,6415 為總位元組數
list --- 列出每封郵件的位元組數
+OK --- 執行命令成功,開始顯示,左邊為郵件的序號,右邊為該郵件的大小
1 537 --- 第 1 封郵件,大小為 537 位元組
2 5878 --- 第 2 封郵件,大小為 5878 位元組
.
top 1 --- 接收第 1 封郵件
+OK --- 接收成功, 返回第 1 封郵件頭
Return-Path: <
Delivered-To: [email protected]
Received: (winmail server invoked for smtp delivery); Mon, 25 Oct 2004 14:24:27 +0800
From: [email protected]
To: [email protected]
Date: Mon, 25 Oct 2004 14:24:27 +0800
Subject: test mail
.
retr 1 --- 接收第 1 封郵件
+OK --- 接收成功, 返回第 1 封郵件全部內容
Return-Path: <
Delivered-To: [email protected]
Received: (winmail server invoked for smtp delivery); Mon, 25 Oct 2004 14:24:27 +0800
From: [email protected]
To: [email protected]
Date: Mon, 25 Oct 2004 14:24:27 +0800
Subject: test mail
Hi, test2
This is a test mail, you don't reply it.
.
dele 1 --- 刪除第 1 封郵件
+OK --- 刪除成功
dele 2 --- 刪除第 2 封郵件
+OK --- 刪除成功
quit --- 結束會話
+OK --- 執行命令成功
相關推薦
Socket例項1--POP3客戶端程式
下面的程式碼例項基於POP3的客戶協議,與郵件伺服器連線並取回指定使用者帳號的郵件。 與郵件伺服器互動的命令存在字串陣列POPMessage中,程式通過一個do-while迴圈依次傳送這些命令。#include<stdio.h> <stdlib.h> <errno.h>
使用 Socket 通訊實現 FTP 客戶端程式
簡介: FTP 客戶端如 FlashFXP,File Zilla 被廣泛應用,原理上都是用底層的 Socket 來實現。FTP 客戶端與伺服器端進行資料交換必須建立兩個套接字,一個作為命令通道,一個作為資料通道。前者用於客戶端向伺服器傳送命令,如登入,刪除某個檔案,後者
python--DenyHttp項目(1)--socket編程:客戶端與服務器端
brush accept acc -- highlight 發送消息 src size 接受 查找了許多資料,實現了客戶端與服務器端的連接,通過虛擬機進行測試 服務器端IP:192.168.37.129 端口1122 客戶端IP: 192.168.37.1 端口1122
linux下C語言程式設計日誌(1):基於TCP協議的伺服器/客戶端程式
基於TCP協議的伺服器/客戶端程式 首先我們看一下使用TCP協議進行網路通訊的程式基本模型:伺服器首先進行初始化操作:呼叫函式socket建立一個套接字,函式bind將這個套接字與伺服器的公認地址繫結在一起,函式listen將這個套接字換成傾聽套接字,然後呼叫函式acc
如何使用C實現MQTT+TLS客戶端程式(1)--使用mosquitto搭建MQTT伺服器
前言 這是一個使用C語言實現的MQTT/TLS的客戶端程式,主要應用在各類嵌入式產品。如果想使用在Android裝置上,讀者可以參考Paho mqtt。 簡單介紹MQTT MQTT遙測傳輸(MQ Telemetry Transport,MQT
簡易socket 多線程客戶端 服務器
bre handle lose cli connect oca mat exce send 簡易客戶端: import socket client = socket.socket() client.connect((‘localhost’,9999)) while
8.1 構建客戶端總體流程
lib encoding tty ann dem 關系 zkclient 緩存 tom 一 示例 1 配置文件: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns:xsi="http://
Socket編程實現客戶端與服務器一對一聊天
bug servers sys 編程 獲取 post edr class 一個 Socket(套接字) 使用Socket編程實現數據的交互需要經歷以下幾個步驟: 1、創建Socket: Socket socket = new Socket("host",p
python多線程socket編程--多客戶端接入
info name -- number fcm 版本 string itl ont Python中實現socket通信的服務端比較復雜,而客戶端非常簡單,所以客戶端基本上都是用sockct模塊實現,而服務 端用有很多模塊可以使用,如下: 1、客戶端 2、SocketSe
(已解決)c# 客戶端程式訪問oracle報錯:ORA-12154: TNS: 無法處理服務名
錯誤:ORA-12154: TNS: 無法處理服務名 這個錯誤大家在百度上一搜一大把,但是我出現這個錯誤的原因跟百度不太一樣,我的客戶端程式在不同的目錄可以正常執行,但在其中1個目錄就是要出錯,因此我想到是目錄路徑中出了問題,既然是路徑那就只能是資料夾名有什麼特殊之處導致不能執行,後來發現不能執
socket.io開啟其客戶端debug的方法
由於我們開發除錯需要對比我們的應用和socket.io的區別,因此我們需要除錯js版本的socket.io,以便判斷我們寫的版本和他們原版的區別。這裡看了socket.io的官方文件,瞭解瞭如何開啟socket.io的debug的方法。 最簡單的方法是 localStorag
ftp客戶端程式的三個實驗
準備好兩臺互相ping通的虛擬機器 一。匿名使用者 安裝需要用的包 vim 編輯主配置檔案 vim /etc/vsftpd/vsftpd.conf 第十二行等於YES 第十五行等於NO 27行和31行的#去掉 重啟服務service vsftpd restart 到客戶機端 安裝ftp服
實現socket的服務和客戶端通訊
對學習過程中自己敲的一些關於socket有關的程式碼做了個簡單總結,在這分享一下,給有需要的同學借鑑一下。 什麼是socket? 網路上的兩個程式通過一個雙向的通訊連線實現資料的交換,這個連線的一端稱為一個socket。 建立網路通訊連線至少要一對埠號(socket)。socke
java 使用html寫UI 做winform win桌面客戶端程式(一)
大家好,今天給大家帶來使用java+html寫winform win客戶端桌面程式的教程。 在讀本文之前你首先要能接受: 1 客戶端基於java+html所以 軟體包中需要包含 jre和 cef(chrome核心)的dll,軟體包比較大。 2 &
支援 Appium 伺服器的客戶端程式庫列表
這些庫封裝了標準的 Selenium 客戶端,提供了所有 JSON Wire protocol 指定的常規 selenium 命令,額外新增操控移動裝置相關的命令,例如 多點觸控手勢 和 螢幕方向。 Appium 客戶端程式庫實現了 M
boost::asio伺服器處理多個客戶端連線(客戶端程式)
//客戶端程式 // // main.cpp // tcpserver // Created by suxianbin on 2018/9/15. // Copyright © 2018 suxianbin. All rights
hdfs叢集第一個客戶端程式
在叢集實體機中,我們可以直接通過實體機操作hdfs系統,直接使用hdfs命令將實體機中的檔案上傳至叢集檔案系統中,但實際應用中叢集會面向客戶端操作,不再是傳統命令操作,而是通過相應的客戶端程式來執行 測試之前先注意一下幾點: 1.叢集啟動狀況,是否正常
socketserver和socket的補充(驗證客戶端合法性)
hello ram cli digest hand 連接 close his imp 一、socket的補充 1、參數 socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None) 參
客戶端程式設計師的工具們
人和動物的本質區別就是會製作和使用工具…… 日誌持續提升: eDiary 記錄工作筆記學習心得,可以加密,而且配置可以拷貝,非常好用,用了6年了。 檔案查詢 everything windows環境下快速檔案查詢,一個字,快。搜尋支援正則表示式。
MySQL(1)---MySQL客戶端工具的選擇
最近因系統雲化專案,學習使用MySQL叢集,為了找一款順手的mysql客戶端,反覆使用了多個工具,並篩選出一個自認為最滿意的,在此分享。 先說我的選擇:SQLyog。 嘗試的客戶端:Toad for MySQL、MySQL-Front、Navicat for MySQ