1. 程式人生 > >win32 socket程式設計 示例(功能簡單,完善)

win32 socket程式設計 示例(功能簡單,完善)

最近在做的一個專案要用到網路通訊方面的內容,於是自學了下win32socket,原來自己學過計算機網路,只瞭解網路各層的原理,但沒有真正的程式設計來實現這些原理,哎,不過現在還來得及,下面是自己的一個示例,雖然簡單,但瞭解了它,就知道了最基本的socket程式設計的方法!

/*

功能描述:與伺服器連線後,可以不斷的與伺服器端通訊(傳送資訊)

當伺服器關閉,程式將提示退出!

*/

client.cpp

// Client.cpp : 定義控制檯應用程式的入口點。
//

#include "stdafx.h"
#include "Winsock2.h"
#include "stdio.h"
#include "stdlib.h"
void main()
{
//初始化socket程式設計環境
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) 
{
   return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
   HIBYTE( wsaData.wVersion ) != 1 ) 
{
   WSACleanup( );
   return; 
}
//建立客戶端socket
SOCKET sockClient = socket( AF_INET ,SOCK_STREAM , 0 ) ;
//伺服器地址
SOCKADDR_IN addrSrv ;
addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1") ;
addrSrv.sin_family = AF_INET ;
addrSrv.sin_port = htons( 4000 ) ;
//連線伺服器

//等待接收伺服器的響應
char recvBuf[100];
memset(recvBuf, 0, 100);
connect( sockClient , (SOCKADDR*)&addrSrv , sizeof(SOCKADDR)) ;
int r = 0;
do//不斷與伺服器連線,直到它關閉
{
   printf("receiving.....\n");
   r = recv( sockClient , recvBuf , 100 , 0 ) ;
   printf("receive end.....\n");
   printf( "data from server: %s\n" , recvBuf ) ;

   char sendBuf[100] ;
   printf("input the message to send[1-100]: ");
   gets(sendBuf);
   printf("sending.....\n");
   r = send( sockClient , sendBuf , strlen(sendBuf)+1 , 0 ) ;
   printf("send ended. waiting for server\n");
  
}while(r != SOCKET_ERROR);
printf("server connect error! app will exit\n");
system("PAUSE");
closesocket( sockClient ) ;
WSACleanup() ; 
}

/*
功能描述:不斷的監聽客戶端的TCP連線資訊,並反饋給客戶端

直到客戶端關閉

*/

// Socket Demo.cpp : 定義控制檯應用程式的入口點。
//

#include "stdafx.h"
#include "Winsock2.h"
#include "stdio.h"
#include "stdlib.h"
void main()
{
//初始化socket程式設計環境
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) 
{
   return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
   HIBYTE( wsaData.wVersion ) != 1 ) 
{
   WSACleanup( );
   return; 
}
//建立Tcp伺服器socket
SOCKET sockSrv = socket( AF_INET , SOCK_STREAM , 0 );

//伺服器地址
SOCKADDR_IN addrSrv ;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY) ;
addrSrv.sin_family = AF_INET ;
addrSrv.sin_port = htons(4000) ;

//將socket與地址繫結在一起
bind( sockSrv ,(SOCKADDR*)&addrSrv , sizeof(SOCKADDR) ) ;
//開始監聽客戶端請求,最大連線數為5
listen( sockSrv , 5 ) ;

//用於存放客戶端地址
SOCKADDR_IN addrClient ;
int len = sizeof( SOCKADDR_IN ) ;
//不斷接收客戶端傳送的請求
SOCKET sockConn;
//接收到的客戶端請求socket
printf("accepting.....\n");
sockConn = accept( sockSrv , (SOCKADDR *)&addrClient , &len ) ;
printf("accept end.....\n");
//傳送資料
char sendBuf[100] ;
memset(sendBuf, 0, 100);
int r = 0;
do {///不斷得到客戶端發來的請求
  
  
   sprintf( sendBuf , "Weclome %s to here:" , inet_ntoa(addrClient.sin_addr) ) ;
   printf("sending.....\n");
   r = send( sockConn , sendBuf , strlen(sendBuf)+1 , 0 ) ;
   printf("send end.....\n");
   //接收資料
   char recvBuf[100] ;
   printf("receiving.....\n");
   r = recv( sockConn , recvBuf , 100 , 0 ) ;
   printf("receive end.....\n");
   printf("data from client: %s\n" , recvBuf ) ;
}while ( r != SOCKET_ERROR );

printf("client connect error! app will exit\n");
system("PAUSE");
//關閉socket
closesocket( sockConn ) ;
//清理socket程式設計環境
WSACleanup() ;
}

配置:必須加入WS2_32.lib!

win32 socket程式設計要用到WS2_32.lib,請在配置裡面的連結器->輸入中的附加依賴項中加入它

或者用#pragma comment(lib, "Ws2_32.lib")

相關推薦

win32 socket程式設計 示例功能簡單完善

最近在做的一個專案要用到網路通訊方面的內容,於是自學了下win32socket,原來自己學過計算機網路,只瞭解網路各層的原理,但沒有真正的程式設計來實現這些原理,哎,不過現在還來得及,下面是自己的一個示例,雖然簡單,但瞭解了它,就知道了最基本的socket程式設計的方法! /* 功能描述:與伺服器連線

Linux socket編程示例簡單的TCP和UDP兩個例子

步驟 proto 詳解 dto 應該 pro sock bind ram 一、socket編程    網絡功能是Uinux/Linux的一個重要特點,有著悠久的歷史,因此有一個非常固定的編程套路。   基於TCP的網絡編程:     基於連接, 在交互過程中, 服務器

程式設計2^12假設AX=2;此時不能再用ADD功能費事---loop 的使用

1.程式: assume cs:code code segment mov ax ,2 mov cx ,11 s: add ax,ax loop s mov ax,4c00H int

socket程式設計入門1---連線socket傳送資料 出現的錯誤

1,socket通訊最基本的需要兩個檔案,一個是服務端檔案,另外一個是客戶端檔案。 2,客戶端檔案client.php : 服務端檔案server.php : /* +——————————- * @socket通訊整個過程 +————

從 0 開始學習 Linux 系列之「27.Socket 程式設計基礎TCPUDP

Socket 介面簡介 Socket 套接字是由 BSD(加州大學伯克利分校軟體研發中心)開發的一套獨立於具體協議的網路程式設計介面,應用程式可以用這個介面進行網路通訊。要注意:Socket 不是一套通訊協議(HTTP,FTP 等是通訊協議),而是程式設計的介

qt自己定義搜索框簡單帶效果圖

clu blog button jsb 搜索 代碼 source fix color 1. 什麽也不要說。先上效果圖: 2. 代碼 頭文件: #ifndef APPSEARCHLINE_H #define APPSEARCHLINE_H #inc

ThinkPHP5 支付寶支付擴展庫簡單超好用~

thinkphp5 支付寶支付 alipay 支付寶擴展我的想法是,只需要調用一個靜態方法就可以完成所需要的所有工作,再也不必重復造輪子!ThinkPHP5 支付寶支付擴展庫, 包括手機網站支付、電腦網站支付、支付查詢、退款、退款查詢、對賬單等隨著支付寶官方不斷更新(目前是2017年7月21日),大家可以在G

簡單的安卓點擊按鈕跳轉示例整蠱扣費

ref nat cow userinfo dsv href 盜鏈 ocs 跳轉 v2勘7灸1沒疤9得Lhttp://www.docin.com/qkvl6227 Ei053K衛3GWM強蔥Ihttp://weibo.com/p/1005056373158586 塵拍

填坑:Windows下使用OpenSSL生成自簽證書簡單一個晚上搞明白的讓後來者少走彎路

vat 都是 環境 csr 過程 環境變量 crypt 報錯 out 最近在學習中發現openssl 中有個坑,所有的教程都是openssl genrsa -des3 -out private.key 1024,但是產生的證書,npm start 之後就報錯如下: erro

Socket程式設計之TCP的簡單實現

Client import java.io.*; import java.net.Inet4Address; import java.net.InetSocketAddress; import java.net.Socket; public class Client { pub

NodeMedia / NodeMediaClient-Android一個簡單快速免費的直播SDK

NodeMedia RTMP/RTMFP/RTSP/HTTP Play/Publish Client SDK for Android 用Gradle匯入 allprojects { repositories { google() jcenter()

輸出9*9乘法口訣表 簡單通過這個題說一下輸出形式讓輸出更加美觀

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<windows.h> int main() { int i = 0; int j = 0; int sum = 0;

Python Socket 程式設計示例 Echo Server

簡評:我們已經從「Python Socket 程式設計概覽」瞭解了 socket API 的概述以及客戶端和伺服器的通訊方式,接下來讓我們建立第一個客戶端和伺服器,我們將從一個簡單的實現開始,伺服器將簡單地回顯它接收到客戶端的任何內容。本文將詳細解釋伺服器部分的程式碼。 下面是伺服器程式碼儲存到 echo

flink安裝以及執行自帶wordcount示例單機版無hadoop環境

1、下載安裝包到/opt目錄 2、解壓安裝包 tar zxf flink-1.6.1-bin-hadoop26-scala_2.11.tgz  3、啟動flink cd /opt/flink-1

521. 最長特殊序列 Ⅰ(簡單陣列12.17

 給定兩個字串,你需要從這兩個字串中找出最長的特殊序列。最長特殊序列定義如下:該序列為某字串獨有的最長子序列(即不能是其他字串的子序列)。 子序列可以通過刪去字串中的某些字元實現,但不能改變剩餘字元的相對順序。空序列為所有字串的子序列,任何字串為其自身的子序列。 輸入為兩個字串,輸

Linux socket程式設計示例3 select函式的使用

1.select函式簡介 int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval*timeout); 當伺服器響應多個客戶端連線的時候,需要定義一個執行緒

JavaWeb--應用程式設計模型JSP model2 MVC三層結構

一、MVC MVC並非是java特有,幾乎所有B/S結構專案都用它 M----->Model模型 V------>view檢視     C----->controller控制層  二、JSP model2

TCP連線擁塞控制四種方法總結詳細簡單穩的一批

擁塞控制的一般原理 在某段時間,若對網路中某一資源的需求超過了該資源所能提供的可用部分,網路的效能就要變換,叫做擁塞 擁塞控制和流量控制的區別: 擁塞控制往往是一種全域性的,防止過多的資料注入到網路之中,而TCP連線的端點只要不能收到對方的確認資訊,猜想在網路中發生了擁塞,但並不知道發生

win10家庭版升級專業版的一些經驗方法簡單也可用於專業版的啟用

win10家庭版總有一些不太方便,有好多設定都沒法更改。 於是自己查找了許多教程,找到一條最可靠的、最簡單的升級/啟用方法,在此分享給大家。 此方法有兩種(均要聯網),先看看手動操作是什麼樣的           &

Linux下的socket程式設計實踐TCP服務端優化和常見函式

併發下的殭屍程序處理 只有一個程序連線的時候,我們可以使用以下兩種方法處理殭屍程序: 1)通過忽略SIGCHLD訊號,避免殭屍程序     在server端程式碼中新增     signal(