winsock2之最简单的win socket编程

原文:winsock2之最简单的win socket编程

 

server.cpp

#include <WINSOCK2.H>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
int main(int argc,char **argv)
{
    //创建套接字
    WORD myVersionRequest;
    WSADATA wsaData;
    myVersionRequest=MAKEWORD(1,1);
    int err;
    err=WSAStartup(myVersionRequest,&wsaData);
    if (!err){
        printf("已打开套接字\n");
    }else{
        printf("ERROR:嵌套字未打开!");
        return 1;
    }
    //进一步绑定套接字
    SOCKET serSocket=socket(AF_INET,SOCK_STREAM,0);//创建了可识别套接字

    //需要绑定的参数
    SOCKADDR_IN addr;
    addr.sin_family=AF_INET;
    addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//ip地址
    addr.sin_port=htons(6000);//绑定端口

    bind(serSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR));//绑定完成
    listen(serSocket,5);//其中第二个参数代表能够接收的最多的连接数

    //////////////////////////////////////////////////////////////////////////
    //开始进行监听
    //////////////////////////////////////////////////////////////////////////
    SOCKADDR_IN clientsocket;
    int len=sizeof(SOCKADDR);
    while (1)
    {
        SOCKET serConn=accept(serSocket,(SOCKADDR*)&clientsocket,&len);//如果这里不是accept而是conection的话。。就会不断的监听
        char sendBuf[100];

        sprintf(sendBuf,"hello, %s !",inet_ntoa(clientsocket.sin_addr));//找对对应的IP并且将这行字打印到那里
        printf("Send:%s\n",sendBuf);
        send(serConn,sendBuf,strlen(sendBuf)+1,0);

        char receiveBuf[100];//接收
        recv(serConn,receiveBuf,sizeof(receiveBuf),0);
        printf("recv:%s\n",receiveBuf);

        closesocket(serConn);//关闭
        WSACleanup();//释放资源的操作
        return 0;
    }
    return 1;
}
 

client.cpp

#include <WINSOCK2.H>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
int main(int argc,char **argv)
{
    int err;
    WORD versionRequired;
    WSADATA wsaData;
    versionRequired=MAKEWORD(1,1);
    err=WSAStartup(versionRequired,&wsaData);//协议库的版本信息
    if (!err)    {
        printf("客户端嵌套字已经打开!\n");
    }else{
        printf("ERROR:客户端的嵌套字打开失败!\n");
        return 1;//结束
    }
    SOCKET clientSocket=socket(AF_INET,SOCK_STREAM,0);

    SOCKADDR_IN clientsock_in;
    clientsock_in.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
    clientsock_in.sin_family=AF_INET;
    clientsock_in.sin_port=htons(6000);

    //bind(clientSocket,(SOCKADDR*)&clientsock_in,strlen(SOCKADDR));//注意第三个参数
    //listen(clientSocket,5);
    connect(clientSocket,(SOCKADDR*)&clientsock_in,sizeof(SOCKADDR));//开始连接
    char receiveBuf[100];
    if(true){

        printf("Send:%s\n","hello,this is client");
        send(clientSocket,"hello,this is client",strlen("hello,this is client")+1,0);

        recv(clientSocket,receiveBuf,101,0);
        printf("Recv:%s\n",receiveBuf);

        closesocket(clientSocket);
        WSACleanup();
    }
    return 0;
}

编译运行:

call "C:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT"

cl server.cpp
cl client.cpp
start cmd /k server
start cmd /k client
cmd

 

 

http://www.cnblogs.com/xianqingzh/archive/2009/02/03/1382963.html

 

时间: 2024-09-26 02:27:40

winsock2之最简单的win socket编程的相关文章

Win Socket编程原理及简单实例

[转]http://www.cnblogs.com/tornadomeet/archive/2012/04/11/2442140.html  使用Linux Socket做了小型的分布式,如Linux C Socket编程原理及简单实例. 为了更好地分布也得看看Win Socket. Win Socket TCP原理图: Win Socket UDP原理图:    简单TCP连接实例: 服务器端: 1 #include <WINSOCK2.H> 2 #include <stdio.h&g

简单的C# Socket编程

Server,服务器代码. 使用Socket套接字连接. 1 using System; 2 using System.Net; 3 using System.Net.Sockets; 4 using System.IO ; 5 6 public class Echoserver 7 { 8 //entry point of main method. 9 public static void Main() 10 { 11 //TcpListener is listening on the giv

一个简单的java socket编程问题

问题描述 server端:packageServer;importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.BufferedReader;importjava.io.DataInputStream;importjava.io.DataOutputStream;importjava.io.IOException;importjava.io.InputStreamReader;import

Windows Socket 编程_单个服务器对多个客户端简单通讯 .

单个服务器对多个客户端程序: 一.简要说明 二.查看效果 三.编写思路 四.程序源代码 五.存在问题   一.简要说明:  程序名为:TcpSocketOneServerToMulClient  程序功能:实现单个服务器对多个客户端通讯功能的小程序. PS: 这是继上次简单的 Tcp Windows Socket 编程后的再一程序,程序实现依然不是很严谨,还待完善~   二.查看效果:   三.编写思路:  由上一次的程序思路来看,如果想实现单个服务器对多个客户端程序的通讯的话,这次程序编写尝试

Ruby中的Socket编程简单入门

  这篇文章主要介绍了Ruby中的Socket编程简单入门,是Ruby网络编程学习中的基础知识,需要的朋友可以参考下 Ruby提供了两个访问级别的网络服务.在一个较低的水平,可以访问底层的操作系统,它可以实现面向连接和无连接协议的客户端和服务器支持基本的socket. Ruby也具有程序库,提供更高级别的访问特定的应用程序级的网络协议,如FTP,HTTP等. 这篇教程介绍 Ruby Socket编程概念及讲解一个简单的实例. 什么是Sockets? 套接字是一个双向通信信道的端点.socket能

nat穿透 udp-谁给一个在两个不同局域网内的主机,实现socket编程,能够发送和接收简单的数据

问题描述 谁给一个在两个不同局域网内的主机,实现socket编程,能够发送和接收简单的数据 本鸟在 网上查了一下资料,大部分都是关于tcp,udp穿透nat的方案,有一种是通过在一个外网的服务端的基础上实现,这得需要买一个外网ip,这种方案,我放弃了,我没钱买一个在公网上的ip 还一种一方端口映射,,不用外网的ip这种方式怎么实现啊??难道只是在路由器的转发规则,虚拟服务器上把自己的主机的ip和那个端口号添上就可以吗??上就可以吗??

简单的Ruby中的Socket编程教程_ruby专题

Ruby提供了两个级别访问网络的服务,在底层你可以访问操作系统,它可以让你实现客户端和服务器为面向连接和无连接协议的基本套接字支持. Ruby 统一支持应用程的网络协议,如FTP.HTTP等. 不管是高层的还是底层的.ruby提供了一些基本类,让你可以使用TCP,UDP,SOCKS等很多协议交互,而不必拘泥在网络层.这些类也提供了辅助类,让你可以轻松的对服务器进行读写. 接下来就让我们来学习如何进行 Ruby Socket 编程什么是 Sockets 应用层通过传输层进行数据通信时,TCP和UD

Java Socket编程实现简单的问候服务_java

本文实例讲解了Java Socket编程实现简单的问候服务的详细代码,供大家参考,具体内容如下 服务器端: 实现一个最简单的Hello服务,打印输出客户端IP地址到控制台,对任何连接的客户端都会发送一串字符(Hello, Java Socket)然后关闭与客户端连接.等待下一个客户端的连接请求到来. 客户端: 实现一个最简单的Socket连接到Hello服务器端,接受服务器端发送过来的字节数据打印并输出内容到控制台. 关键技巧: 由于JAVA中提供非常多的输入与输出流API,导致很多初学者接触J

socket编程(1)简单的TCP/UDP编程

socket编程是一种与底层网络协议无关的编程方式,socket意味一种插口,即一个地址配上一个端口就构成了一端插口,既然他与底层协议无关,所以我们在使用socket 编程的时候,就可以任意选用哪种网络协议,如最流行的tcp/ip协议. 在所有socket编程前腰包含头文件<WinSock2.h> 下面是基于连接的tcp编程方法: 服务器端:服务器端是指在tcp中进行监听,也就是被动连接的那一端,服务器端在于客户端建立好连接后,可以同服务器端发送和接收信息,他用一个监听socket进行监听客户