Winsock程式設計初步之<三> 源程式例項(2) (轉)
//A simplest client
//Written by Shen zhiliang for learning Winsock & HTTP
//zhiliang@sina.com
//1998.7.29
#include "winsock.h"
#include "stdio.h"
#define BUFLEN 4096
void SocketError(char * call)
{
fprintf(stderr," WinSock Error# function: %s, error code:%ldn",call,WSAGetLastError());
}
main(int argc,char ** argv)
{
int iRes,iPort,iTmp;
SOCKET s,rs;
SOCKADDR_IN sin,rsin;
WSADATA wsad;
wVersionReq;
char recvBuf[BUFLEN];
if(argc<4)
{
fprintf(stderr,"Usage: sockserver port messagen");
return -1;
}
if(_addr(argv[1])==INADDR_NONE)
{
fprintf(stderr,"Error ip gavingn");
return -1;
}
iPort=0;
iPort=atoi(argv[2]);
sin.sin_addr.s_addr=inet_addr(argv[1]);
sin.sin_family=PF_INET;
sin.sin_port=htons(iPort);
if(iPort<=0)
{
fprintf(stderr,"must specify a number for portn");
return -1;
}
wVersionReq=MAKEWORD(1,1);
iRes=Wtartup(wVersionReq,&wsad);
if(iRes!=0)
{
SocketError("WSAStartup()");
return -1;
}
s=socket(PF_INET,SOCK_STREAM,0);
if(s==INVALID_SOCKET)
{
SocketError("socket()");
return -1;
}
iTmp=sizeof(sin);
fprintf(stderr,"WinSock Client Start......n");
if(connect(s,(LPSOCKADDR)&sin,iTmp)==SOCKET_ERROR)
{
SocketError("connect()");
closesocket(s);
WSACleanup();
return -1;
}
strcpy(recvBuf,argv[3]);
strcat(recvBuf,"rnrn");
iRes=send(s,recvBuf,strlen(recvBuf),0);
if(iRes==SOCKET_ERROR)
{
SocketError("send()");
closesocket(s);
WSACleanup();
return -1;
}
printf("Sent Data:n------------------n%sn------------------n",recvBuf);
FILE * fp=fopen("send.dat","a+b");
if(fp==NULL)
return -1;
iRes=recv(s,recvBuf,BUFLEN,0);
while(iRes!=SOCKET_ERROR&&iRes!=0)
{
printf("Received Data:n------------------n%sn------------------n",recvBuf);
fwrite(recvBuf,sizeof(char),iRes,fp);
iRes=recv(s,recvBuf,BUFLEN,0);
}
fclose(fp);
closesocket(s);
WSACleanup();
return 0;
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1001893/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 設計模式例項程式碼設計模式
- Jmeter beanshell程式設計例項JMeterBean程式設計
- KafKa Java程式設計例項KafkaJava程式設計
- 《bash shell指令碼程式設計經典例項(第2版)》資源連結清單指令碼程式設計
- 詳解Python物件導向程式設計之類、例項、方法Python物件程式設計
- 網路爬蟲筆記2, requests庫入門-2(程式設計例項)爬蟲筆記程式設計
- Rust 程式設計影片教程(進階)——010_2Box 使用例項Rust程式設計
- 網頁倒數計時跳轉程式碼例項網頁
- Linux系統程式設計之程式間通訊方式:共享記憶體例項演示Linux程式設計記憶體
- Rust 程式設計視訊教程(進階)——010_2Box 使用例項Rust程式設計
- VC++視覺化程式設計第一個程式設計例項出錯C++視覺化程式設計
- shell script程式設計小結——附帶例項程式設計
- Spark程式設計環境搭建及WordCount例項Spark程式設計
- 玩轉 PHP 網路程式設計全套之 socket 選項設定 APIPHP程式設計API
- 好程式設計師Java培訓之類的例項化步驟程式設計師Java
- 轉行程式設計師深漂的這三年 #2行程程式設計師
- 玩轉 PHP 網路程式設計全套之 socket stream 程式設計PHP程式設計
- [翻譯]返回導向程式設計例項入門程式設計
- PLC程式設計例項(星三角形控制與交通燈控制)C程式程式設計
- PHP程式碼審計03之例項化任意物件漏洞PHP物件
- div前後翻轉效果程式碼例項
- CSS3旋轉效果程式碼例項CSSS3
- 深入淺出Win32多執行緒程式設計--之綜合例項Win32執行緒程式設計
- LINUX Shell指令碼程式設計例項詳解(一)上Linux指令碼程式設計
- 微控制器C程式設計例項指導pdfC程式程式設計
- makefile--偽目標語法與程式設計例項程式設計
- 初步瞭解C語言Windows程式設計C語言Windows程式設計
- 好程式設計師web前端分享在HTML中使用JavaScript例項程式碼程式設計師Web前端HTMLJavaScript
- 【程式設計開發】之 OAuth2程式設計OAuth
- 2、Dart:非同步程式設計之Futures;Dart非同步程式設計
- JavaScript倒數計時程式碼例項JavaScript
- 劍法三套,程式設計師也能賺大錢(2) 轉程式設計師
- 程式設計注意事項程式設計
- Python - 物件導向程式設計 - 類變數、例項變數/類屬性、例項屬性Python物件程式設計變數
- Spring程式設計式和宣告式事務例項講解Spring程式設計
- 併發程式設計之 Java 三把鎖程式設計Java
- 玩轉 PHP 網路程式設計全套之多程式程式設計PHP程式設計
- JAVA網路程式設計(2)TCP程式設計Java程式設計TCP
- 關於前言中提供的幾處線上資源_C#併發程式設計經典例項(第2版)C#程式設計