摘写的简单到非常的基于TCP的网络应用程序

本文提供了一个基于TCP的服务器和客户端编程示例,使用Winsock库实现。服务器监听6000端口并响应客户端连接请求,发送欢迎消息并接收客户端数据。客户端则连接到指定IP地址的服务器,并接收服务器消息后回应。

/*----------------------------------------------------------------------

/+++Theme :a network sample programmingbaseed on TCP

/+++Author:Standy Huang

/+++CreateTime:Oct/28/2006

/+++CopyrightFrom:<VC++深入详解>++By Sun Xin.etc

// 

----------------------------------------------------------------------*/

//please add the <Ws2_32>to both server and client or else it will generate link error

//Server:

// TCP_servertest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include <winsock2.h>

#include <stdio.h>

int main()

{
 //load  socket library

 WORD wVersionRequested;
 WSADATA wsaData;
 int   err;
 wVersionRequested=MAKEWORD(1,1);
 err=WSAStartup(wVersionRequested, &wsaData);
 if(err!=0) 
  return -1;

 if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
 {
  WSACleanup();
  return -1;
 }

 // Create the socket for listen

 SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0); 
 SOCKADDR_IN addrSrv;
 addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
 addrSrv.sin_family=AF_INET;
 addrSrv.sin_port=htons(6000);
 //bind the socket to the server
 bind(sockSrv,  (SOCKADDR*)&addrSrv,  sizeof(SOCKADDR));
 listen(sockSrv,5);
 SOCKADDR_IN addrClient;
 int   len=sizeof(SOCKADDR);

 while(1)
 {
  //wait for a certain client visiting

  SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
  char sendBuf[100];
  sprintf   (sendBuf,   "Welcome%s  here", inet_ntoa(addrClient.sin_addr));

  //send data to client
  send(sockConn,sendBuf,strlen(sendBuf)+1,0);
  char recvBuf[100];

  //receive data from client
  recv(sockConn,recvBuf,100, 0);
  printf("%s/n",recvBuf);

  //shutdown the socket
  closesocket(sockConn);
 }
 return 1;
}
//end of server

 

//Client

// TCP_Clienttest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <winsock2.h>
#include <stdio.h>

int main()
{
 WORD wVersionRequested;
 WSADATA wsaData;
 int   err;
 wVersionRequested=MAKEWORD(1,1);
 err=WSAStartup(wVersionRequested, &wsaData);
 if(err!=0) 
  return -1;
 if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
 {
  WSACleanup();
  return -1;
 }
 SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
 SOCKADDR_IN addrSrv;
 addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.1.117");
 addrSrv.sin_family=AF_INET;
 addrSrv.sin_port=htons(6000);
 int status=connect (sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
 if(status!=0)
 {
  printf("the socket cannot connect/n");
  return 0;
 }
 else
 {

  char  recvBuf[256];

  recv(sockClient,recvBuf,256,0);
  printf("%s/n",recvBuf);

  send(sockClient,"This is HighLandear",strlen("This is HighLandear")+1,0);
  closesocket(sockClient);
  WSACleanup();
  return 1;
 }
}

//end of client

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值