以下是服務器端代碼:
#include "stdafx.h"
#include<Winsock2.h>
#pragma comment(lib," ws2_32.lib")
#include<stdio.h>
int main(int argc, char* argv[])
{ //裝載Winsock庫的代碼,成功回傳0
//失敗則呼叫WSAGetLastError
WSADATA wsaData;
WORD sockVersion = MAKEWORD(2, 2);
//加載Winsock庫
if(WSAStartup(sockVersion,&wsaData) !=0)
return 0;
/*socket函式原型如下:
SOCKET socket{
int af;//指定套接字使用的地址格式,這里只能能用AF_INET
int type;//指定套接字的型別
int protocol;//tcp or udp
}*/
//創建套接字
SOCKET sListen = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sListen == INVALID_SOCKET){
printf("socket error\n");
return 0;
}
//在sockaddr_in結構中裝入地址資訊
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(4500);//htons函式將主機的無符號短整形數轉換成網路位元組順序
sin.sin_addr.S_un.S_addr = INADDR_ANY;
//使套接字和本地地址系結
if(bind(sListen,(LPSOCKADDR)&sin,sizeof(sin))==SOCKET_ERROR)
{
printf("bind error\n");
closesocket(sListen);
return 0;
}
//設定套接字進入監聽模式
if(listen(sListen,5) == SOCKET_ERROR){
printf("listen error\n");
closesocket(sListen);
return 0;
}
//回圈接受客戶的連接請求
sockaddr_in remoteAddr;
SOCKET sClient ;
int nAddrLen = sizeof(remoteAddr);
char revData[255];
while(true)
{
//接受一個新的連接
sClient =accept(sListen,(SOCKADDR*)&remoteAddr,& nAddrLen);
//accept函式呼叫失敗則繼續等待連接
if(sClient == INVALID_SOCKET)
{
printf("accept() error");
continue;
}
//列印出連接者的ip
printf("接收到一個連接:%s \r\n",inet_ntoa(remoteAddr.sin_addr));
//直到收到有效資料才列印出來
int ret = recv(sClient,revData,255,0);
if(ret>0)
{
//為防止列印出錯,把字串結尾設成0x00;
revData[ret]=0x00;
printf(revData);
}
char *buff="\r\n 黑客編程,我來了\r\n";
//發送資料
send(sClient ,buff,strlen(buff),0);
//關閉套接字句柄,結束會話
closesocket(sClient);
}
closesocket(sListen);
WSACleanup();
return 0;
}
下面是客戶端:
#include "stdafx.h"
#include<Winsock2.h>
#pragma comment(lib,"ws2_32")
#include<stdio.h>
int main(int argc, char* argv[])
{
//裝載Winsock庫的代碼,成功回傳0
//失敗則呼叫WSAGetLastError
WSADATA wsaData;
WORD sockVersion = MAKEWORD(2, 2);
//加載Winsock庫
if(WSAStartup(sockVersion,&wsaData) !=0)
return 0;
/*socket函式原型如下:
SOCKET socket{
int af;//指定套接字使用的地址格式,這里只能能用AF_INET
int type;//指定套接字的型別
int protocol;//tcp or udp
}*/
//創建套接字
SOCKET sClient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sClient == INVALID_SOCKET)
{
printf("socket error\n");
return 0;
}
//在sockaddr_in結構中裝入地址資訊
sockaddr_in servAddr;
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(4500);//htons函式將主機的無符號短整形數轉換成網路位元組順序
servAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//服務器ip連接服務器端
//使套接字和本地地址系結
if(connect(sClient,(sockaddr*)&servAddr,sizeof(servAddr))==SOCKET_ERROR)
{
printf("connect error\n");
closesocket(sClient);
return 0;
}
int ret = recv(sClient,revData,255,0);
if(ret>0)
{
//為防止列印出錯,把字串結尾設成0x00;
revData[ret]=0x00;
printf(revData);
}
char *buff="\r\n 黑客編程,我來了 \r\n";
//發送資料
send(sClient,buff,strlen(buff),0);
char revData[255];
//直到收到有效資料才列印出來
closesocket(sClient);
WSACleanup();
return 0;
}
但是老是提示我的客戶端的“stdafx.h”頭檔案找不到,打不開,no such files.
uj5u.com熱心網友回復:
#include "stdafx.h"這行注釋掉試試
或者換VS 2010
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/72730.html
上一篇:資料結構與離散數學的關系
下一篇:編程小菜鳥求幫助
