visual studio怎么写tcp协议?

visual studio怎么写tcp协议?,第1张

在 Visual Studio 中,可以使用 C++ 或 C# 编写 TCP 协议的程序。以下是使用 C++ 和 C# 的两种方法:

C++ 实现 TCP 协议

使用 C++ 实现 TCP 协议需要使用 Windows 套接字 API。以下是一个简单的 C++ 示例代码,使用套接字 API 创建 TCP 客户端程序:

#include <iostream>

#include <winsock2.h>

#pragma comment(lib, "ws2_32.lib")

int main() {

WSADATA wsaData

SOCKET ConnectSocket = INVALID_SOCKET

struct addrinfo *result = NULL, *ptr = NULL, hints

int iResult

// 初始化 Winsock

iResult = WSAStartup(MAKEWORD(2, 2), &wsaData)

if (iResult != 0) {

std::cout <<"WSAStartup failed: " <<iResult <<std::endl

return 1

}

ZeroMemory(&hints, sizeof(hints))

hints.ai_family = AF_UNSPEC

hints.ai_socktype = SOCK_STREAM

hints.ai_protocol = IPPROTO_TCP

// 解析服务器地址和端口

iResult = getaddrinfo("www.example.com", "80", &hints, &result)

if (iResult != 0) {

std::cout <<"getaddrinfo failed: " <<iResult <<std::endl

WSACleanup()

return 1

}

// 创建套接字并连接服务器

for (ptr = resultptr != NULLptr = ptr->ai_next) {

ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol)

if (ConnectSocket == INVALID_SOCKET) {

std::cout <<"socket failed: " <<WSAGetLastError() <<std::endl

WSACleanup()

return 1

}

iResult = connect(ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen)

if (iResult == SOCKET_ERROR) {

closesocket(ConnectSocket)

ConnectSocket = INVALID_SOCKET

continue

}

break

}

freeaddrinfo(result)

if (ConnectSocket == INVALID_SOCKET) {

std::cout <<"Unable to connect to server" <<std::endl

WSACleanup()

return 1

}

// 发送和接收数据

iResult = send(ConnectSocket, "GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n", strlen("GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n"), 0)

if (iResult == SOCKET_ERROR) {

std::cout <<"send failed: " <<WSAGetLastError() <<std::endl

closesocket(ConnectSocket)

WSACleanup()

return 1

}

char recvbuf[512]

do {

iResult = recv(ConnectSocket, recvbuf, sizeof(recvbuf), 0)

if (iResult >0) {

std::cout.write(recvbuf, iResult)

}

else if (iResult == 0) {

std::cout <<"Connection closed" <<std::endl

}

else {

std::cout <<"recv failed: " <<WSAGetLastError() <<std::endl

}

} while (iResult >0)

// 关闭套接字和清理 Winsock

closesocket(

最简单的那种?我给你写一个=,=

//服务器

#include <sys/stat.h>

#include <fcntl.h>

#include <errno.h>

#include <netdb.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <string.h>

#include <stdlib.h>

#include <stdio.h>

#include <unistd.h>

main()

{

//创建套接字

int serverSocket= socket(AF_INET,SOCK_STREAM,0)

struct sockaddr_in server_addr

struct sockaddr_in clientAddr

int addr_len = sizeof(clientAddr)

int client

char buffer[200]

//创建地址

bzero(&server_addr,sizeof(server_addr))

server_addr.sin_family =AF_INET

server_addr.sin_port = htons(5555)

server_addr.sin_addr.s_addr = htonl(INADDR_ANY)

//绑定

bind(serverSocket,(struct sockaddr *)&server_addr,sizeof(server_addr))

//帧听

listen(serverSocket,5)

printf("客户端发过来的 :\n")

//接收

client=accept(serverSocket,(sockaddr *)&clientAddr,(socklen_t*)&addr_len)

printf("客户端发过来的 :\n")

while(1)

{

if(recv(client,buffer,sizeof(buffer),0)>0)

printf("客户端发过来的 : %s\n",buffer)

}

return 0

}

//客户端

#include <sys/stat.h>

#include <fcntl.h>

#include <errno.h>

#include <netdb.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <string.h>

#include <stdlib.h>

#include <stdio.h>

#include <unistd.h>

main()

{

struct sockaddr_in serverAddr

int clientSocket=socket(AF_INET,SOCK_STREAM,0)

char sendbuf[200]

//创建地址信息

serverAddr.sin_family=AF_INET

serverAddr.sin_port=htons(5555)

serverAddr.sin_addr.s_addr=inet_addr("127.0.0.1")

//连接服务器

connect(clientSocket,(sockaddr*)&serverAddr,sizeof(serverAddr))

printf("连接目标主机中.....\n连接完成......\n")

//

while(1)

{

printf("请输入发给服务器的数据 : ")

scanf("%s",sendbuf)

//strcmp函数作用,比较两个东东(按ASCII值大小相比较),相同就==0。

if(strcmp(sendbuf,"x")==0)

break

send(clientSocket,sendbuf,sizeof(sendbuf),0)

}

close(clientSocket)

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7957440.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存