socket的客户端和服务端(Windows控制台程序)
首先是两个程序,分别是socket的客户端和服务端。(在windows系统vc6.0编译)
服务器端:
#include <Winsock2.h>
#include <stdio.h>
#pragma comment(lib,"WS2_32.lib")
void main()
{
WSADATA wsd;
SOCKET server; //服务器socket
SOCKADDR_IN addrSrv;
char sendBuf[100];
char recvBuf[100];
SOCKADDR_IN addrClient;
SOCKET client; //连接的客户端socket
int len;
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
printf("start up failed!\n");
return ;
}
server=socket(AF_INET,SOCK_STREAM,0); //创建socket
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); //设置地址
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000); //设置端口号
bind(server,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); //绑定
listen(server,5); //设置最多连接数
len=sizeof(SOCKADDR);
while(1)
{
client=accept(server,(SOCKADDR*)&addrClient,&len); //接收客户端连接
sprintf(sendBuf,"Welcome %s ",
inet_ntoa(addrClient.sin_addr));
send(client,sendBuf,strlen(sendBuf)+1,0); //发送信息客户端
recv(client,recvBuf,100,0); //接收客户端数据
printf("%s\n",recvBuf);
closesocket(client);
}
closesocket(client); //关闭连接
WSACleanup();
}
客户端:
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib,"WS2_32.lib")
void main()
{
WSADATA wsd;
SOCKET sockClient; //客户端socket
SOCKADDR_IN addrSrv;
char recvBuf[100];
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
printf("start up failed!\n");
return ;
}
sockClient=socket(AF_INET,SOCK_STREAM,0); //创建socket
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)); //连接服务器端
recv(sockClient,recvBuf,100,0); //接收服务器端数据
printf("%s\n",recvBuf);
send(sockClient,"hello world",strlen("hello world")+1,0); //向服务器端发送数据
closesocket(sockClient); //关闭连接
WSACleanup();
}
以上两个程序只需要简单的改写,就可以实现简单的传送文件了。
将客户端发送的信息改为发送请求的文件名。
send(sockClient,filename,strlen(filename)+1,0);
服务器端接收到文件名:
recv(client,filename,100,0);
服务器端发送文件信息:
if((fp=fopen(filename,"rb"))==NULL)closesocket(client); //请求的文件不存在,则关闭连接
n=fread(sendBuf,1,100,fp);
while(n>0){
send(client,sendBuf,n,0); //发送文件客户端
n=fread(sendBuf,1,100,fp);
}
客户端则接收文件信息:
if((fp=fopen(filename,"wb"))==NULL)
{
return ;
}
while((ret=recv(sockClient,recvBuf,100,0))>0)
{
fwrite(recvBuf,1,ret,fp);
}
socket的客户端和服务端(Windows控制台程序)的更多相关文章
- c++ 网络编程(一)TCP/UDP windows/linux 下入门级socket通信 客户端与服务端交互代码
原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9601511.html c++ 网络编程(一)TCP/UDP 入门级客户端与服务端交互代码 网 ...
- Python socket编程客户端与服务端通信
[本文出自天外归云的博客园] 目标:实现客户端与服务端的socket通信,消息传输. 客户端 客户端代码: from socket import socket,AF_INET,SOCK_STREAM ...
- Socket通信客户端和服务端代码
这两天研究了下Socket通信,简单实现的客户端和服务端代码 先上winfrom图片,客户端和服务端一样 服务端代码: using System; using System.Collections.G ...
- 用PHP的socket实现客户端到服务端的通信
服务端 <?php error_reporting(E_ALL); set_time_limit(0); ob_implicit_flush(); //本地IP $address = 'loca ...
- 基于socket.io客户端与服务端的相互通讯
socket.io是对websocket的封装,用于客户端与服务端的相互通讯.官网:https://socket.io/. 下面是socket.io的用法: 1.由于使用express开的本地服务,先 ...
- 基于socket的客户端和服务端聊天机器人
服务端代码如下: using System;using System.Net;using System.Net.Sockets;using System.Text;using System.Threa ...
- 基于socket的客户端和服务端聊天简单使用 附Demo
功能使用 服务端 分离一个不停接受客户端请求的线程 接受不客户端请求的线程中,再分离就收消息的线程 几大对象分别是 IPEndPoint IP终结点 服务端Socket,绑定终结点Bind,启动监听L ...
- C# Winform 通过Socket实现客户端和服务端TCP通信
操作界面如下: 1.声明Socket 第一个参数:寻址方式,第二个参数:传输数据的方式,第三个参数:通信协议 Socket socket = new Socket(AddressFamily.Inte ...
- 在Java中使用Socket模拟客户端和服务端(多线程)
1:Socket与ServerSocket的交互 2.Socket和ServerSocket介绍 Socket 构造函数 Socket() Socket(InetAddress address, in ...
- c++ Socket客户端和服务端示例版本二
客户端 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <sys/soc ...
随机推荐
- Bootstrap的Modal与WebUploader联用的问题及办法
问题描述:在使用Bootstrap的Modal的时候,在Modal中用了WebUploader插件,然后WebUploader的绑定按钮无法点击 在网上找了一些结果,觉得,他们的问题解决方案感觉都不够 ...
- rpmbuild时为什么会出现空的debugsourcefiles.list?
错误: 空 %file 文件 /home/user/rpmbuild/BUILD/xxxx-0.1/debugsourcefiles.list 你看错误的里边有一个%file,这是使用spec文件构建 ...
- K3S 系列文章-5G IoT 网关设备 POD 访问报错 DNS 'i/o timeout'分析与解决
开篇 <K3s 系列文章> <Rancher 系列文章> 问题概述 20220606 5G IoT 网关设备同时安装 K3S Server, 但是 POD 却无法访问互联网地址 ...
- NET近期面试总结和面试题
一.面试总结 避坑:深圳龙岗李朗YH股份会鸽offer 因为offer被鸽重新找工作,从8号开始面试到12号(11家公司),整体感觉面试难度不大,就是很多公司都是走流程,并不是真的需要人,有些甚至聊一 ...
- MFC中的RTTI(Runtime Type Identification, 运行时类型识别)详解(参考《深入浅出MFC》)
在MFC中的RTTI的实现,主要是利用一个名为CRuntimeClass的结构来链接各个"有关系的类"的信息来实现的.简单来说,就是在需要用到RTTI技术的类内建立CRuntime ...
- 黑马Mybatis快速入门
创建user表,添加数据,Mysql: 1 create database mybatis; 2 use mybatis; 3 drop table if exists tb_user; 4 crea ...
- 上篇 | 使用 🤗 Transformers 进行概率时间序列预测
介绍 时间序列预测是一个重要的科学和商业问题,因此最近通过使用基于深度学习 而不是经典方法的模型也涌现出诸多创新.ARIMA 等经典方法与新颖的深度学习方法之间的一个重要区别如下. 概率预测 通常,经 ...
- 题解 Trie 但是你要最小化它的节点数量
名字瞎取的 Description 给定 \(n\) 个字符串 \(s\),可以对 \(s_i\) 的字符打乱,将这些字符串加入一个 trie 里面求节点数量最小值. \(n\le 16, \sum ...
- Blob 和 ArrayBuffer
Blob 和 ArrayBuffer Blob 对象表示的是二进制到文本的对象: ArrayBuffer 对象表示一段二进制数据,用来模拟内存里面的数据. Blob 关于 Blob 的详细内容:了解 ...
- LeetCode-587 安装栅栏及三种凸包算法的学习
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/erect-the-fence 题目描述 在一个二维的花园中,有一些用 (x, y) 坐标表示的树 ...