69,373
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
#include <winsock.h>
#include <iostream>
#pragma comment( lib,"Ws2_32.lib")
#define DEFAULT_PORT 2000
using namespace std;
int Receive(SOCKET fd,char *szText,int len)
{
int cnt, rc;
cnt=len;
while(cnt>0)
{
rc=recv(fd,szText,cnt,0);
if(rc==SOCKET_ERROR)
{
return -1;
}
if(rc==0)
return len-cnt;
szText+=rc;
cnt-=rc;
}
return len;
}
int Send(SOCKET fd,char *szText,int len)
{
int cnt, rc;
cnt=len;
while(cnt>0)
{
rc=send(fd,szText,cnt,0);
if(rc==SOCKET_ERROR)
{
return -1;
}
if(rc==0)
return len-cnt;
szText+=rc;
cnt-=rc;
}
return len;
}
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wsaData;
if(WSAStartup(0x0110,&wsaData)) //调用Windows Sockets DLL
{
printf("Winsock无法初始化!");
return -1;
}
DWORD dwIP = 0;
char szText[MAX_PATH];
memset(szText,0,MAX_PATH);
//把字符串形式的IP地址转成IN_ADDR结构需要的形式。
dwIP = inet_addr("192.168.0.4");
sockaddr_in local;
SOCKET socketTmp;
//必须是AF_INET,表示该socket在Internet域中进行通信
local.sin_family=AF_INET;
//端口号
local.sin_port=htons(DEFAULT_PORT);
//服务器的IP地址。
local.sin_addr.S_un.S_addr=dwIP;
////初始化Socket
socketTmp=socket(AF_INET,SOCK_STREAM,0);
//连接服务器
if(connect(socketTmp,(LPSOCKADDR)&local,sizeof(local)) < 0)
{
closesocket(socketTmp);
printf("连接服务器失败。");
system("pause");
return 0;
}
//发送请求,为简单只发100字节,在服务器端也规定100字节。
while(1)
{
char a[100];
cin >> a;
//if(a == char("exit"))
//{
// closesocket(socketTmp);
// return 0;
//}
Send(socketTmp,a,100);
//读取服务器端返回的数据。
memset(szText,0,MAX_PATH);
//接收服务器端的回应。
Receive(socketTmp,szText,100);
char szMessage[MAX_PATH];
memset(szMessage,0,MAX_PATH);
strcat(szMessage,szText);
//界面上显示回应数据。
puts(szMessage);
}
closesocket(socketTmp);
//system("pause");
}
// CSocketSev.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <winsock.h>
#include <iostream>
#pragma comment( lib,"Ws2_32.lib")
#define DEFAULT_PORT 2000
SOCKET m_Listening;
int Receive(SOCKET fd,char *szText,int len)
{
int cnt, rc;
cnt=len;
while(cnt>0)
{
rc=recv(fd,szText,cnt,0);
if(rc==SOCKET_ERROR)
{
return -1;
}
if(rc==0)
return len-cnt;
szText+=rc;
cnt-=rc;
}
return len;
}
int Send(SOCKET fd,char *szText,int len)
{
int cnt, rc;
cnt=len;
while(cnt>0)
{
rc=send(fd,szText,cnt,0);
if(rc==SOCKET_ERROR)
{
return -1;
}
if(rc==0)
return len-cnt;
szText+=rc;
cnt-=rc;
}
return len;
}
DWORD WINAPI ListenThread(LPVOID lpparam)
{
SOCKET Listening = m_Listening;
//开始监听是否有客户端连接。
if(listen(Listening,40) == SOCKET_ERROR)
{
return 0;
}
char szBuf[MAX_PATH];
//初始化
memset(szBuf,0,MAX_PATH);
while(1)
{
SOCKET ConnectSocket;
sockaddr_in ClientAddr;
int nLen = sizeof(sockaddr);
//阻塞直到有客户端连接,不然多浪费CPU资源。
ConnectSocket = accept(Listening,(sockaddr*)&ClientAddr,&nLen);
//都到客户端的IP地址。
char *pAddrname = inet_ntoa(ClientAddr.sin_addr);
Receive(ConnectSocket,szBuf,100);
//界面上显示请求数据。
strcat(szBuf,"来自(");
strcat(szBuf,pAddrname);
strcat(szBuf,")");
//向客户端发送回应数据
Send(ConnectSocket,szBuf,100);
puts(szBuf);
}
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wsaData;
if(WSAStartup(0x0110,&wsaData)) //调用Windows Sockets DLL
{
puts("Winsock无法初始化!");
return -1;
}
DWORD dwThreadID = 0;
sockaddr_in local;
//DWORD dwThreadID = 0;
local.sin_family=AF_INET;
//设置的端口为DEFAULT_PORT。
if(argc>0)
{
local.sin_port = htons(argv[0]);
}
else
{
local.sin_port=htons(DEFAULT_PORT);
}
//local.sin_port=htons(DEFAULT_PORT);
//IP地址设置成INADDR_ANY,让系统自动获取本机的IP地址。
local.sin_addr.S_un.S_addr=INADDR_ANY;//inet_addr("127.0.0.1");
//初始化Socket
m_Listening=socket(AF_INET,SOCK_STREAM,0);
if(m_Listening == INVALID_SOCKET)
{
puts("创建Winsock实例失败!");
return -1;
}
if(bind(m_Listening,(LPSOCKADDR)&local,sizeof(local)) == SOCKET_ERROR )
{
closesocket(m_Listening);
puts("绑定端口失败!");
return -1;
}
//THREAD m_hListenThread;
//m_hListenThread = ::CreateThread(NULL,0,ListenThread,this,0,&dwThreadID);
if(listen(m_Listening,40) == SOCKET_ERROR)
{
puts("监听端口失败!");
return -1;
}
puts("启动成功");
char szBuf[MAX_PATH];
//初始化
memset(szBuf,0,MAX_PATH);
while(1)
{
SOCKET ConnectSocket;
sockaddr_in ClientAddr;
int nLen = sizeof(sockaddr);
//阻塞直到有客户端连接,不然多浪费CPU资源。
ConnectSocket = accept(m_Listening,(sockaddr*)&ClientAddr,&nLen);
//都到客户端的IP地址。
char *pAddrname = inet_ntoa(ClientAddr.sin_addr);
Receive(ConnectSocket,szBuf,100);
//向客户端发送回应数据
Send(ConnectSocket,szBuf,100);
//界面上显示请求数据。
strcat(szBuf,"\t来自(");
strcat(szBuf,pAddrname);
strcat(szBuf,")");
//closesocket(ConnectSocket);
puts(szBuf);
}
}