日期:2014-05-17 浏览次数:20889 次
// 服务器端实现代码
#include <WinSock.h>
#include <iostream>
using namespace std;
#define MAX_NAMEBUF 255
#define MAX_BUF 1024
// 网络链接库
#pragma comment( lib , "ws2_32.lib")
void socketInit2()
{
// Windows异步套接字)的启动命令
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,1),&wsaData)) //调用Windows Sockets DLL
{
printf("Winsock无法初始化!\n");
WSACleanup();
return;
}
int sockfd,new_fd;
struct sockaddr_in my_addr;
struct sockaddr_in their_addr;
int sin_size;
//建立TCP套接口
if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1)
{
printf("create socket error\n");
perror("socket");
exit(1);
}
//初始化结构体,并绑定2323端口
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(2323);
my_addr.sin_addr.s_addr = INADDR_ANY;
memset(my_addr.sin_zero, 0, 8);
//绑定套接口
if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1)
{
perror("bind socket error");
exit(1);
}
//创建监听套接口
if(listen(sockfd,10)==-1)
{
perror("listen");
exit(1);
}
//等待连接
while(1)
{
sin_size = sizeof(struct sockaddr_in);
printf("server is run.\n");
//如果建立连接,将产生一个全新的套接字
if((new_fd = accept(sockfd,(struct sockaddr *)&their_addr,&sin_size))==-1)
{
perror("accept");
exit(1);
}
printf("accept success.\n");
//读取客户端发来的信息
int numbytes;
char buff[256];
memset(buff,0,256);
if((numbytes = recv(new_fd,buff,sizeof(buff),0))==-1)
{
perror("recv");
exit(1);
}
printf("%s\n",buff);
//将从客户端接收到的信息再发回客户端
if(send(new_fd,buff,strlen(buff),0)==-1)
{
perror("send");
closesocket(new_fd);
exit(0);
}
closesocket(new_fd);
}
closesocket(sockfd);
}
int _tmain(int argc, _TCHAR* argv[])
{
socketInit2();
return 0;
}// 客户端实现代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <WinSock2.h>
#include <iostream>
// 网络链接库
#pragma comment( lib , "ws2_32.lib")
int main(int argc,char *argv[])
{
// Windows异步套接字)的启动命令
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,1),&wsaData)) //调用Windows Sockets DLL
{
printf("Winsock无法初始化!\n");
WSACleanup();
return 0;
}
int sockfd,numbytes;
char buf[100];
struct sockaddr_in their_addr;
//建立一个TCP套接口
if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket");
printf("create socket error.建立一个TCP套接口失败");
exit(1);
}
//初始化结构体,连接到服务器的2323端口
their_addr.sin_family = AF_INET;
their_addr.sin_port = htons(2323);
hostent *pEnt;
char hostname[256];
::gethostname(hostname, sizeof(hostname));
if ((pEnt = ::gethostbyname(hostname)) != NULL)
{
ULONG ad = *(ULONG *)pEnt->h_addr_list[0];
their_addr.sin_addr.s_addr = ad;
std::cout<<ad<<std::endl;
}
memset(their_addr.sin_zero,0,8);
//和服务器建立连接
if(connect(sockfd,(struct sockaddr *)&their_addr,sizeof(struct sockaddr))==-1)
{
perror("connect");
exit(1);
}
//向服务器发送数据
if(send(sockfd,"hello!socket.",16,0)==-1)
{
perror("send");
exit(1);
}
//接受从服务器返回的信息
if((numbytes = recv(sockfd,buf,100,0))==-1)
{
perror("recv");
exit(1);
}
buf[numbytes] = '\0';
printf("Recive from server:%s\n",buf);
//关闭socket
closesocket(sockfd);
getchar();
}