c语言使用winsock创建一个tcp客户端
时间: 2024-01-20 12:45:01 浏览: 24
以下是使用Winsock创建TCP客户端的基本步骤:
1. 初始化Winsock库
```c
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0) {
printf("WSAStartup failed: %d\n", iResult);
return 1;
}
```
2. 创建套接字
```c
SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (clientSocket == INVALID_SOCKET) {
printf("socket failed: %ld\n", WSAGetLastError());
WSACleanup();
return 1;
}
```
3. 设置服务器地址和端口号
```c
sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(8080);
inet_pton(AF_INET, "127.0.0.1", &serverAddr.sin_addr);
```
4. 连接服务器
```c
int iResult = connect(clientSocket, (SOCKADDR*)&serverAddr, sizeof(serverAddr));
if (iResult == SOCKET_ERROR) {
printf("connect failed: %d\n", WSAGetLastError());
closesocket(clientSocket);
WSACleanup();
return 1;
}
```
5. 发送和接收数据
```c
char sendBuf[1024] = "Hello, server!";
char recvBuf[1024];
int recvLen;
iResult = send(clientSocket, sendBuf, strlen(sendBuf), 0);
if (iResult == SOCKET_ERROR) {
printf("send failed: %d\n", WSAGetLastError());
closesocket(clientSocket);
WSACleanup();
return 1;
}
recvLen = recv(clientSocket, recvBuf, 1024, 0);
if (recvLen > 0) {
recvBuf[recvLen] = '\0';
printf("Received: %s\n", recvBuf);
} else if (recvLen == 0) {
printf("Connection closed\n");
} else {
printf("recv failed: %d\n", WSAGetLastError());
}
```
6. 关闭套接字和Winsock库
```c
closesocket(clientSocket);
WSACleanup();
```
完整的代码示例:
```c
#include <stdio.h>
#include <winsock2.h>
#pragma comment (lib, "ws2_32.lib")
int main() {
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0) {
printf("WSAStartup failed: %d\n", iResult);
return 1;
}
SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (clientSocket == INVALID_SOCKET) {
printf("socket failed: %ld\n", WSAGetLastError());
WSACleanup();
return 1;
}
sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(8080);
inet_pton(AF_INET, "127.0.0.1", &serverAddr.sin_addr);
iResult = connect(clientSocket, (SOCKADDR*)&serverAddr, sizeof(serverAddr));
if (iResult == SOCKET_ERROR) {
printf("connect failed: %d\n", WSAGetLastError());
closesocket(clientSocket);
WSACleanup();
return 1;
}
char sendBuf[1024] = "Hello, server!";
char recvBuf[1024];
int recvLen;
iResult = send(clientSocket, sendBuf, strlen(sendBuf), 0);
if (iResult == SOCKET_ERROR) {
printf("send failed: %d\n", WSAGetLastError());
closesocket(clientSocket);
WSACleanup();
return 1;
}
recvLen = recv(clientSocket, recvBuf, 1024, 0);
if (recvLen > 0) {
recvBuf[recvLen] = '\0';
printf("Received: %s\n", recvBuf);
} else if (recvLen == 0) {
printf("Connection closed\n");
} else {
printf("recv failed: %d\n", WSAGetLastError());
}
closesocket(clientSocket);
WSACleanup();
return 0;
}
```