tcp服务器与客户端
TCP服务端
Socket->bind->listen->accept->send/recv->close
创建过程
1、新建一个常规空项目项目
按确定后->按项目(添加新项),如下图->添加
2、增加代码,试运行,查看程序是否出错
程序代码如下:
#include<stdio.h>
#include<stdlib.h>
void main(void)
{
printf(“hello\n”);
System(“pause”);
}
3、注释掉上面的内容,输入下列工程代码
程序代码如下:
#pragma comment(lib,"ws2_32.lib")
#include<WinSock2.h>
#include<stdio.h>
#include<stdlib.h>
void main(void)
{
WSADATA wsData;
int ClientAddrLen;//客户端地址长度
SOCKADDR_IN ClientAddr;//客户端地址
SOCKET ListeningSocket;
SOCKADDR_IN ServerAddr;//服务器地址
char DataBufer[1024];
int Ret;
SOCKET NewConnect;
int Port = 5150;
if ((Ret = WSAStartup(MAKEWORD(2, 2), &wsData)) != 0)
//初始化windows套接字
{
printf("=WSAStartup failed with error %d\n", Ret);
return;
}
if( (ListeningSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
//创建服务器端流式套接字,需用TCP协议
{
printf("socket failed with error d\n,WAGetLastError()");
//得到错误信息
WSACleanup();//清理
return;
}
ServerAddr.sin_family = AF_INET;
//套接;inter net协议
ServerAddr.sin_port = htons(Port);
//本机字节转化为网络字节
ServerAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//不限制客户端IP
if ((bind(ListeningSocket, (SOCKADDR*)&ServerAddr, sizeof(ServerAddr))) == SOCKET_ERROR)
{
printf("bind failed with error %d\n", WSAGetLastError());
closesocket(ListeningSocket);
WSACleanup();
return;
}
//设置监听,队列中最多有5个排列
if ((listen(ListeningSocket,5))==SOCKET_ERROR)
{
printf("listen failed with error %d\n", WSAGetLastError());
closesocket(ListeningSocket);
WSACleanup();
return;
}
printf("We are waiting a connection on port %d:\n",Port);
printf("liten(正在监听)...\n");
ClientAddrLen = sizeof(SOCKADDR);
if((NewConnect=accept(ListeningSocket,(SOCKADDR*)&ClientAddr,&ClientAddrLen))==INVALID_SOCKET)
{
printf("accept failed with error %d\n", WSAGetLastError());
closesocket(ListeningSocket);
WSACleanup();
return;
}
printf("We successfully got a connect from %s: %d\n", inet_ntoa(ClientAddr.sin_addr),ntohs(ClientAddr.sin_port));
closesocket(ListeningSocket);//在强大就不用关闭
printf("We are waiting to receive data \n");
if ((Ret=recv(NewConnect, DataBufer,sizeof( DataBufer), 0)) == SOCKET_ERROR)
{
printf("recv failed with error %d\n", WSAGetLastError());
closesocket(NewConnect);
WSACleanup();
return;
}
printf("We successfully receive %d bytes\n", Ret);
DataBufer[Ret] = '\0';
printf("%s\n",DataBufer);
printf("We are now going to close the client connection\n");
closesocket(NewConnect);
WSACleanup();
return;
system("pause");
}
4、运行以上代码,找到运行出的exe文件,将其复制到c盘的新建的文件夹中
客户端
Socket->connect->send/recv->close
创建过程
1、2如同服务端的1、2。
3、注释掉上面的内容,输入下列工程代码
程序代码如下:
#pragma comment(lib,"ws2_32.lib")
#include<WinSock2.h>
#include<stdio.h>
#include<stdlib.h>
void main(int argc, char**argv)
{
WSADATA wsData;
int Ret;
SOCKET s;
SOCKADDR_IN ServerAddr;
int Port = 5555;
if (argc<=1)
{
printf("USAGE:TCP客户端<Server IP address>\n");
//system("pause");
return;
}
if ((Ret=WSAStartup(MAKEWORD(2,2),&wsData))!=0)
{
printf("=WSAStartup failed with error %d\n", Ret);
return;
}
if ((s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
{
printf("socket failed with error d\n,WAGetLastError()");
WSACleanup();
return;
}
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_port = htons(Port);
ServerAddr.sin_addr.S_un.S_addr = inet_addr(argv[1]);
printf("We are trying to connect to %s:%d\n", inet_ntoa(ServerAddr.sin_addr), htons(ServerAddr.sin_port));
if (connect(s, (SOCKADDR*)&ServerAddr, sizeof(ServerAddr)) == SOCKET_ERROR)
{
printf("connect failed with error %d\n", WSAGetLastError());
closesocket(s);
WSACleanup();
return;
}
printf("Our connect succeeded\n");
printf("We will now try to send a hello message\n");
if ((Ret=send(s,"hello",5,0))==SOCKET_ERROR)
{
printf("send failed with error %d\n", WSAGetLastError());
closesocket(s);
WSACleanup();
return;
}
printf("We successfully send %d bytes\n", Ret);
printf("We are closing the connect\n");
closesocket(s);
WSACleanup();
return;
system("pause");
}
4、运行以上代码,找到运行出的exe文件,将其复制到c盘的新建的文件夹中
5、打开运行窗口输入以下命令运行TCP服务器
cd\
cd 你的exe文件所在的文件夹
6、在打开一个运行窗口口输入一下命令
cd\
cd 你的exe文件所在的文件夹 设备的IP
只要是获取本机IP都可以输入127.0.0.1
- 关于socket应用:一个不断监听一个进程的服务器以及发送信息的客户端 TCP的三次握手和四次挥手
- TCP传输,客户端和服务器通信
- 使用Select I/O模型来实现一个并发处理多个客户端的TCP服务器
- python实现TCP服务器与多个客户端通信案例
- (二)TCP客户端/服务器通信------I/O模型
- c++做服务器,java当客户端,采用 tcp协议之相互通信demo
- Tcp通信中服务器处理客户端意外断开!
- tcp/ip客户端与服务器
- TCP服务器/客户端程序
- Java基础知识强化之网络编程笔记10:TCP之客户端读取文本文件服务器控制台输出
- 【Echo】实验 -- 实现 C/C++下TCP, 服务器/客户端 通讯
- 练习:创建一个多线程的TCP 服务器以及客户端
- 一种减轻服务器负担并提高客户端间通讯效率的网络通讯设计[TCP/UDP合用] | 简单加密
- C++ TCP 服务器客户端Socket编程
- linux下多线程tcp服务器、客户端程序
- Linux c==TCP的多个客户端连接服务器 (20)
- UNIX TCP回射服务器/客户端(6):进程池服务器
- 基于TCP客户端和服务器的I/O多路复用
- python socket之tcp服务器与客户端demo
- python下的TCP传输(分别做服务器与客户端)