吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6130|回复: 8
收起左侧

[C&C++ 转载] 【笔记】VC++ 6.0 socket编程通信

[复制链接]
knife911 发表于 2015-11-11 17:30
本帖最后由 奋斗丶小Z 于 2015-11-11 18:34 编辑


编程环境:VC++ 6.0
程序运行结果

socket编程

socket编程



服务端编写:
1,创建套接字
2,将套接字绑定到一个本地端口,并监听。
3,等待接收数据
4,关闭套接字

服务端代码:
//win32 console application
#include<stdio.h>
#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib")
void main()
{   
//初始化套接字,加载套接字
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested=MAKEWORD(2,2);
err=WSAStartup(wVersionRequested,&wsaData);
if(err!=0){
   return;
}

//创建套接字
SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);

SOCKADDR_IN addrSrv={0};
addrSrv.sin_family=AF_INET;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_port=htons(1114);

//绑定套接字
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//字符数组
char recvBuf[100];     //保存接收信息
char sendBuf[100];     //保存发送信息
char tempBuf[200];      //存放中间临时数据


SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);

while(1)
{
   //等待并接收数据
  recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
   if('q'==recvBuf[0])
   {
    sendto(sockSrv,"q",strlen("q")+1,0,(SOCKADDR*)&addrClient,len);
    printf("chat end!\n");
    break;
   }
   sprintf(tempBuf,"%s say:%s",inet_ntoa(addrClient.sin_addr),recvBuf);
   printf("%s\n",tempBuf);
   //发送数据
  
   printf("please input data:\n");
   gets(sendBuf);
   sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrClient,len);
   
}

//关闭套接字

closesocket(sockSrv);
WSACleanup();
}


客户端编写:
1,创建套接字
2,主动连接服务端
3,发送数据
4,关闭套接字
//win32 console application
#include<stdio.h>
#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib")
void main()
{   
//初始化套接字,加载套接字
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested=MAKEWORD(2,2);
err=WSAStartup(wVersionRequested,&wsaData);
if(err!=0){
   return;
}

//创建套接字
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_IN addrSrv={0};
addrSrv.sin_family=AF_INET;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_port=htons(1114);

//字符数组
char recvBuf[100];     //保存接收信息
char sendBuf[100];     //保存发送信息
char tempBuf[200];      //存放中间临时数据

int len=sizeof(SOCKADDR);

while(1)
{
   //发送数据
  printf("please input data:\n");
   gets(sendBuf);
   sendto(sockClient,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrSrv,len);
   
   //等待并接收数据
  recvfrom(sockClient,recvBuf,100,0,(SOCKADDR*)&addrSrv,&len);
   
   if('q'==recvBuf[0])
   {
    sendto(sockClient,"q",strlen("q")+1,0,(SOCKADDR*)&addrSrv,len);
    printf("chat end!\n");
    break;
   }
   
   sprintf(tempBuf,"%s say:%s",inet_ntoa(addrSrv.sin_addr),recvBuf);
   
   printf("%s\n",tempBuf);
}

//关闭套接字
closesocket(sockClient);
WSACleanup;
}






免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
蛟龙入海 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Cizel 发表于 2015-11-11 20:32
欢迎来编程语言区分享
西行寺幽幽子 发表于 2015-12-29 10:16
这么好的帖子怎么没人呢,前几天学习套接字还专门到网上找资源来着
西行寺幽幽子 发表于 2015-12-29 10:28
楼主发了基于UDP的,我就来一下基于TCP的吧:
服务器:
[C] 纯文本查看 复制代码
#include <Winsock2.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib") 

int main(int argc, char* argv[])
{
	//加载套接字库
	WORD wVersionRequested;//WinSock库的版本号
	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 -2;
	}
	//创建用于监听的套接字
	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(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
	//将套接字设为监听模式,准备接受客户请求
	listen(sockSrv, 5);//5为等待连续队列的最大值
	
	SOCKADDR_IN addrClient;
	int len = sizeof(SOCKADDR);
	
	while(1)
	{
		//等待客户请求到来
		SOCKET sockConn = accept(sockSrv, (SOCKADDR*)&addrClient, &len);//sockConn建立连接的套接字
		char sendBuf[100];
		sprintf( sendBuf, "Welcome %s to the FreeKing World", inet_ntoa(addrClient.sin_addr));
		
		//发送数据
		send( sockConn, sendBuf, strlen(sendBuf)+1, 0 );
		char recvBuf[100];
		//接受数据
		recv( sockConn, recvBuf, 100, 0 );
		//打印接受的数据
		printf( "%s\n", recvBuf);
		//关闭套接字
		closesocket(sockConn);
	}

	return 0;
}


客户端:
[C] 纯文本查看 复制代码
#include <Winsock2.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
int main(int argc, char* argv[])
{
	
	//加载套接字库
	WORD wVersionRequested;//WinSock库的版本号
	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 -2;
	}
	//创建套接字
	SOCKET sockClient = socket( AF_INET,SOCK_STREAM, 0 );
	SOCKADDR_IN addrSrv;
	addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	addrSrv.sin_family = AF_INET;
	addrSrv.sin_port = htons(6000);

	//向服务器发出连接请求
	connect( sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));

	//接受数据
	char recvBuf[100];
	recv( sockClient, recvBuf, 100, 0 );
	printf( "%s\n", recvBuf );

	//发送数据
	send(sockClient, "This is Dong Liu", strlen( "This is Dong Liu" )+1, 0 );
	//关闭套接字
	closesocket(sockClient);
	WSACleanup();
	return 0;
}

kanxue2018 发表于 2015-12-30 09:43

多好的东西了了,谢谢了!
kanxue2018 发表于 2015-12-30 10:24

多好的东西了了,谢谢了!
伤心小狼 发表于 2016-1-7 10:18
给你点32个赞
jmuxqx 发表于 2016-1-7 11:41
学习一下
yulineagle 发表于 2016-1-8 08:33
TCP与UPD通信各有各的用途。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 10:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表