监听套接字,通讯套接字,初始化网卡,多线程。想查自己的IP,ipconfig

服务端

#include "stdafx.h"
#include <WinSock2.h> //套接字 socket CS--->Client Server
#include <iostream>
#include <Windows.h>
using namespace std; #pragma comment(lib,"ws2_32.lib") //动态库的静态加载 DWORD WINAPI THreadFunction(LPVOID lParam);
SOCKET ClientSocket;
int main()
{
//如果要使用ws2_32.lib模块下的函数时,要初始化该模块 WSADATA wsaData = {};
WORD wVersion = MAKEWORD(,); //宏,第一个2放在低8位上,第二个放在高8位上。 if(WSAStartup(wVersion,&wsaData)!=) //一参数为WORD类型,IN,需要赋好值传进来,二参数为LP指针,OUT,需要初始化,传进来接受数据
{
printf("Init Socket Error\r\n");
return ;
} //返回值为0,成功
//套接字相当于保安
SOCKET ListenSocket;//监听套接字 Server socket大写为数据类型,小写为函数 (数据流) (数据报)
ListenSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //创建监听套接字,第一参数服务于什么协议是TCP还是UDP,第二参数中SOCK_STREAM流传送适用于TCP,一个一个,SOCK_DGRAM报传送适用于UDP,一页一页的
if(ListenSocket==INVALID_SOCKET) //创建失败,套接字不存在
{
WSACleanup();
return ;
}
//初始化网卡,相当于给保安建个房子
SOCKADDR_IN LocalAddress;
LocalAddress.sin_family = AF_INET; //IP不要写死
LocalAddress.sin_addr.S_un.S_addr = INADDR_ANY; //传IP地址的两种方式,直接强制转换为u_long型,或者像下面一样一个一个输
LocalAddress.sin_port = htons(); // Host To net string //端口连接,不能冲突(0~1024不要用,已被买断,60000多后面的端口也不要用,被QQ买断) /*
LocalAddress.sin_addr.S_un.S.un_b.s_b1 = '192';
LocalAddress.sin_addr.S_un.S.un_b.s_b2 = '168';
LocalAddress.sin_addr.S_un.S.un_b.s_b3 = '1';
LocalAddress.sin_addr.S_un.S.un_b.s_b4 = '100';
*/ //绑定 让保安住到房子里 大数据小指针,解出三成员
if(bind(ListenSocket,(sockaddr*)&LocalAddress,sizeof(SOCKADDR_IN))==SOCKET_ERROR)
{
closesocket(ListenSocket); //套接字存在,关闭套接字回收资源
WSACleanup();
return ;
} //监听
listen(ListenSocket,); //队列里面有多少未决的连接 //Block 阻塞函数,信号不到达,得不到返回 TCP 上线请求
SOCKADDR_IN RemoteAddress; //客户端的IP地址
int iRemoteAddressLen = sizeof(SOCKADDR_IN);
ClientSocket = accept(ListenSocket,(sockaddr*)&RemoteAddress,&iRemoteAddressLen); //返回值为套接字 //启动一个线程
CreateThread(NULL,,(LPTHREAD_START_ROUTINE)THreadFunction,NULL,,NULL); while(true)
{
char szBufferData[0x1000] = {};
scanf("%s",szBufferData); send(ClientSocket,szBufferData,strlen(szBufferData),);
}
WSACleanup(); //库的回收
return ;
} DWORD WINAPI THreadFunction(LPVOID lParam)
{
while(true)
{
char szBufferData[0x1000] = {};
int iReturn = recv(ClientSocket,szBufferData,0x1000,);
szBufferData[iReturn] = '\0';
printf("%s\r\n",szBufferData);
}
} 客户端
#include "stdafx.h"
#include <WinSock2.h> //套接字 socket
#include <iostream>
#include <Windows.h>
using namespace std; #pragma comment(lib,"ws2_32.lib") //动态库的静态加载 DWORD WINAPI THreadFunction(LPVOID lParam);
SOCKET ClientSocket;//通讯套接字 Client
int main()
{
//如果要使用ws2_32.lib模块下的函数时,要初始化该模块 WSADATA wsaData = {};
WORD wVersion = MAKEWORD(,); if(WSAStartup(wVersion,&wsaData)!=)
{
printf("Init Socket Error\r\n");
return ;
} ClientSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(ClientSocket==INVALID_SOCKET) //创建通讯套接字
{
WSACleanup();
return ;
}
//初始化网卡
SOCKADDR_IN ServerAddress;
ServerAddress.sin_family = AF_INET;
ServerAddress.sin_addr.S_un.S_addr = inet_addr("192.168.0.102");
ServerAddress.sin_port = htons(); connect(ClientSocket,(sockaddr*)&ServerAddress,sizeof(SOCKADDR_IN)); //返回值为int CreateThread(NULL,,(LPTHREAD_START_ROUTINE)THreadFunction,NULL,,NULL); while(true)
{
char szBufferData[0x1000] = {};
int iReturn = recv(ClientSocket,szBufferData,0x1000,);
szBufferData[iReturn] = '\0';
printf("%s\r\n",szBufferData);
}
WSACleanup(); //库的回收
return ;
} DWORD WINAPI THreadFunction(LPVOID lParam)
{
while(true)
{
char szBufferData[0x1000] = {};
scanf("%s",szBufferData); send(ClientSocket,szBufferData,strlen(szBufferData),);
}
}

 

Client与Server的更多相关文章

  1. UDP编程中client和server中使用recvfrom和sendto的区别

    client中:      sendto(sfd,buf,strlen(buf),0,(struct sockaddr *)&saddr,len);      recvfrom(sfd,buf ...

  2. tmux protocol version mismatch (client 7, server 6)

    $ tmux attach protocol version mismatch (client 7, server 6) $ pgrep tmux 3429 $ /proc/3429/exe atta ...

  3. New full duplex HTTP tunnel implementation (client and server)

    https://issues.jboss.org/browse/NETTY-246?page=com.atlassian.jirafisheyeplugin:fisheye-issuepanel —— ...

  4. jvm的client和server

    最近研究c++代码调用java的jar,发现64位的下的jvm在server路径,而32位的jvm则存在client路径下面,于是十分好奇,查了下,这里做个记录 JVM Server模式与client ...

  5. Android简单的聊天室开发(client与server沟通)

    请尊重他人的劳动成果.转载请注明出处:Android开发之简单的聊天室(client与server进行通信) 1. 预备知识:Tcp/IP协议与Socket TCP/IP 是Transmission ...

  6. The client and server cannot communicate, because they do not possess a common algorithm

    The client and server cannot communicate, because they do not possess a common algorithm This was re ...

  7. go http client, http server

    Go语言中的HTTP client, server非常简单.具体如下. HTTP Server package main import ( "fmt" "html&quo ...

  8. onvif协议client与server对接

    happytimesoft有完整的c语言开发的onvif client和server,一共1000$,真便宜,haha. http://www.happytimesoft.com/products/m ...

  9. 带入gRPC:gRPC Streaming, Client and Server

    带入gRPC:gRPC Streaming, Client and Server 原文地址:带入gRPC:gRPC Streaming, Client and Server 前言 本章节将介绍 gRP ...

  10. ESP8266 station模式下建立client、server TCP连接

    程序实现内容: 1.在station模式下,ESP8266作为client.server进行TCP连接2.实现数据的发送.接收(同时回传)实现思路:TCP网络通信分层为:应用层.网络层.数据链路层.物 ...

随机推荐

  1. hdu 1166 敌兵布阵(线段树详解)

    Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任 ...

  2. Moss列表查询,删除条目,更新条目。

    基于Query语句的列表查询 function retrieveListItems(itemId) {    var siteUrl=_spPageContextInfo.webServerRelat ...

  3. Hololens 开发环境配置

    安装 Hololens SDK 转自 Vangos Pterneas, 4 Apr 2016 CPOL    5.00 (1 vote) vote 1vote 2vote 3vote 4vote 5 ...

  4. android 焦点问题

    今天解决了一个Android平台下的焦点问题.发现其中关键问题的所在是Android的touchMode.从JavaSwing平台过来的人,都会关注setFocusable()和requestFocu ...

  5. mvc动态生成a标签,多个属性,多个querystring

    1*服务端 客户端 跳转的url 2*服务端 客户端 跳转的url 3*服务端 客户端  跳转的url  4*服务端 客户端 跳转的url

  6. C#生成随机汉字

    using System; using System.Text; namespace ConsoleApplication {     class ChineseCode     {          ...

  7. 不同版本(2.3,2.4,2.5) web.xml 的web-app头信息

    原址:点击打开链接 Servlet 2.3 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE w ...

  8. Hibernate 系列教程5-双向多对一

    主要讲解inverse和cascade的用法 cascade定义的是关系两端对象到对象的级联关系: 而inverse定义的是关系和对象的级联关系(管理外键的值). inverse 属性默认是false ...

  9. Swift -> Let & Var 背后编程模式 探讨

    简介 Swift中有两种声明“变量”的方式,这两种方式分别使用let和var这两个关键字.这应该是借鉴了Scala,因为它们和Scala的val和var有相同的作用.let被用于声明不变量,var被用 ...

  10. linux系统tomcat项目部署和tomcat访问日志

    一.只用ip地址访问 先把端口号改成80,然后用 <Host name="localhost"  appBase="webapps"    137     ...