套接字之tcp通信
简言
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议.相对比udp要慢一些.服务端server.c
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
#include <Windows.h>
#pragma comment (lib,"ws2_32.lib")
int main(int argc, char *argv[])
{
//发送的字符串
char sendbuffer[128] = { 0 };
//接收的字符串
char receivebuffer[128] = { 0 };
//发送的长度
int sendLength = 0;
//接收长度
int receiveLength = 0;
//SOCKADDR 地址长度
int len;
SOCKET socket_send;
SOCKET socket_receive;
SOCKADDR_IN send_addr;
SOCKADDR_IN receive_addr;
WORD version = MAKEWORD(2, 2);
WSADATA wsadata;
//获取版本,建立通信
int result = WSAStartup(version, &wsadata);
if (result != 0)
{
printf("出现错误!\n");
return 0;
}
//1.设置连接地址
send_addr.sin_family = AF_INET;
send_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
send_addr.sin_port = htons(8089);
//2.创建套接字,接受消息
socket_send = socket(AF_INET, SOCK_STREAM, 0);
//3.绑定地址,端口
bind(socket_send, (SOCKADDR *)&send_addr, sizeof(SOCKADDR));
//4.监听
int listenResult = listen(socket_send, 5);
if (listenResult == -1)
{
printf("绑定端口失败!\n");
return 0;
}
//5.接受消息
len = sizeof(SOCKADDR);
socket_receive = accept(socket_send, (SOCKADDR *)&receive_addr, &len);
while (1)
{
//接受消息
receiveLength = recv(socket_receive, receivebuffer, 128, 0);
printf("server recv:%s\n", receivebuffer);
memset(receivebuffer, 0, 128);
//发送消息
printf("server send:");
scanf("%s", sendbuffer);
sendLength = send(socket_receive, sendbuffer, sizeof(sendbuffer), 0);
memset(sendbuffer, 0, 128);
}
closesocket(socket_receive);
closesocket(socket_send);
WSACleanup();
system("pause");
return 0;
}
客户端 client.c
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
#include <Windows.h>
#pragma comment (lib,"ws2_32.lib")
int main(int argc, char *argv[])
{
//发送的字符串
char sendbuffer[128] = { 0 };
//接收的字符串
char receivebuffer[128] = { 0 };
//发送的长度
int sendLength = 0;
//接收长度
int receiveLength = 0;
//SOCKADDR 地址长度
int len;
SOCKET socket_send;
SOCKADDR_IN send_addr;
WORD version = MAKEWORD(2, 2);
WSADATA wsadata;
//获取版本,建立通信
int result = WSAStartup(version, &wsadata);
if (result != 0)
{
printf("出现错误!\n");
return 0;
}
send_addr.sin_family = AF_INET;
send_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
send_addr.sin_port = htons(8089);
socket_send = socket(AF_INET, SOCK_STREAM, 0);
connect(socket_send, (SOCKADDR *)&send_addr, sizeof(SOCKADDR));
while (1)
{
printf("client send:");
scanf("%s", sendbuffer);
sendLength = send(socket_send, sendbuffer, strlen(sendbuffer) + 1, 0);
memset(sendbuffer, 0, 128);
receiveLength = recv(socket_send, receivebuffer, 128, 0);
printf("client recv:%s\n", receivebuffer);
memset(receivebuffer, 0, 128);
}
closesocket(socket_send);
WSACleanup();
system("pause");
return 0;
}
秋风
2016-08-01