1. 程式人生 > >UDP socket程式設計中使用connect

UDP socket程式設計中使用connect

int recv(int s, void *buf, size_t len, int flags);
int  recvfrom(int  s, void *buf, size_t len, int flags,
struct sockaddr *from,  socklen_t *fromlen);
從他們的定義可以看出,sendto和recvfrom在收發時指定地址,而send和recv則沒有,那麼他們的地址是在那裡指定的呢,答案就在於connect.
int  connect(int  sockfd,  const  struct sockaddr *serv_addr, socklen_t
addrlen);
在udp程式設計中,如果你只往一個地址傳送,那麼你可以使用send和recv,在使用它們之前用connect把它們的目的地址指定一下就可以了。connect函式在udp中就是這個作用,用它來檢測udp埠的是否開放是沒有用的。下面是ntpclient中的程式碼
struct sockaddr_in sa_dest;
bzero((char *) sa_dest, sizeof(*sa_dest));
sa_dest->sin_family=AF_INET;
if(StuffNetAddr(&(sa_dest->sin_addr),host))
return 1;

相關推薦

UDP socket程式設計使用connect

int recv(int s, void *buf, size_t len, int flags); int  recvfrom(int  s, void *buf, size_t len, int flags, struct sockaddr *from,  socklen_t *fromlen); 從他

TCP與UDPsocket程式設計的區別

一、TCP與UDP的區別  基於連線與無連線   對系統資源的要求(TCP較多,UDP少)   UDP程式結構較簡單   流模式與資料報模式   TCP保證資料正確性,UDP可能丟包   TCP保證資料順序,UDP不保證   部分滿足以下幾點要求時,應該採用UDP 面向資料報方式 網路資料大多為短訊息   

C++ TCP socket程式設計的小陷阱(服務端accept 不阻塞 和 客戶端connect 重連失敗)

在編寫一個使用C++ socket實現的TCP服務端與客戶端小軟體時接連碰上2個小陷阱, 終歸是實踐不足,基本功不紮實。 第1個問題: 服務端的accept函式沒有阻塞     程式執行到accept這裡時直接就跳了過去,根本沒停下來。     懷疑過socket

Linux-UDP socket程式設計

伺服器     1、建立連線     socket(),分配檔案描述符,即監聽套接字     bind(),將套接字與本地IP地址和埠繫結    

【網路程式設計】TCP網路程式設計connect()、listen()和accept()三者之間的關係

舉個簡單的例子(以下程式碼只是示範性的,用於說明不同套接字的作用,實際的函式會需要更多的引數): /* 建立用於監聽和接受客戶端連線請求的套接字 */ server_sock = socket(); /* 繫結監聽的IP地址和埠 */ bind(server_sock); /* 開始監聽 */ li

C++ UDP socket程式設計

客戶端: //#include "stdafx.h" #include<stdio.h> #include<tchar.h> #include <iostream> #include <WinSock2.h> #include

【Linux 網路程式設計】TCP網路程式設計connect()、listen()和accept()三者之間的關係

基於 TCP 的網路程式設計開發分為伺服器端和客戶端兩部分,常見的核心步驟和流程如下: connect()函式:對於客戶端的 connect() 函式,該函式的功能為客戶端主動連線伺服器,建立連線是通過三次握手,而這個連接的過程是由核心完成,不是這個函式完成的,這個函式的作用僅僅是通知 Linux 核心

socket 程式設計。 服務端用到多執行緒

客戶端連線服務端之後, 服務端會生成與客戶端交換資訊的socket。 在服務端實現多執行緒: 為每個連線建立一個執行緒進行資訊交換。   import threading from socket import * from time import ctime HOST='127.0.0

關於Socket程式設計的inet_ntop、inet_pton和inet_ntoa、inet_addr

VS2013中除錯Socket程式碼時,遇到了點小問題: 問題程式碼為: inet_ntoa(addrClient.sin_addr);   生成錯誤訊息為: error C4996: 'inet_ntoa': Use inet_ntop() or InetNtop() instead or de

Java Socket程式設計處理長連線的方法

因為實習可能要用Java,所以學習了一下Java,正好計算機網路實驗要寫一個Web伺服器,可以用來練練手。 實現Web伺服器時,最基本的流程就是當有客戶端連線伺服器時,把連線交給一個執行緒,由這個執行緒來處理這個連線。處理的流程也很簡單,就是讀取一個請求,然後

socket程式設計父子程序、兄弟程序的埠問題

通過實驗顯示,還是埠A。為什麼?埠複用技術!那麼,實驗是怎麼做的呢?其實很簡單,server端啟動,在fork出子程序時保證每個子程序的連線保持(可以通過sleep讓其休息一會),此時,通過 “netstat -pan | grep A” 就可以看到有關埠A的一些資訊,可以發現有子程序通過A與對應的clien

socket程式設計connect函式與qt衝突

類中使用了connect,一直報錯: clientstart.cpp:68:63: error: no matching function for call to ‘ClientStart::connect(int&, sockaddr*, long unsigne

socket程式設計遇到的一些小問題

1、htonl(u long ip),將ip地址轉換為網路位元組形式; 2、inet_addr("192.168.1.1"),將字串轉換為u long型ip,注意,此時已經為網路位元組,不需要再用htonl進行轉換。

socket程式設計應用recv判斷連線已斷開

在網路程式設計中,經常會檢測網路的連線情況,進而進行下面的動作。在Linux的socket程式設計中,有一種非常方便的方法,來判斷對方是否斷開了連線,就是使用recv函式。 在APUE 中,對 recv的表述如下, #include <sys/sock

WINDOWS SOCKET程式設計accept出來的新連線是阻塞還是非阻塞

實踐證明 SOCKET hNewSock=accept(hListenSock) 當hListenSock為阻塞模型時,hNewSock則為阻塞模型 否則 當hListenSock為非阻塞模型時,hNewSock則為非阻塞

SOCKET程式設計,select()函式的作用

參考1: 它允許程序指示核心阻塞在等待多個事件中的任一個發生,並僅在一個或多個事件發生或經過某指定的時間後才喚醒程序。#include <sys/select.h>#include <sys/time.h>#include <sys/typ

TCP網路程式設計connect()、listen()和accept()三者之間的關係

基於 TCP 的網路程式設計開發分為伺服器端和客戶端兩部分,常見的核心步驟和流程如下:connect()函式對於客戶端的 connect() 函式,該函式的功能為客戶端主動連線伺服器,建立連線是通過三次

Socket程式設計select()的妙用

【 原文由 cpu 所發表 】    用過 WinSock API 網友們知道:WinSock 程式設計中有一很方便的地方便是其  息驅動機制,不管是底層 API 的 WSAAsyncSelect() 還是 MFC 的非同步Socket類:  CAsyncSocket,都提供了諸如 FD_ACCEPT、FD_

C++程式設計-socket程式設計為何要使用迴圈來呼叫阻塞式recv

        你是否奇怪阻塞式接收recv這樣的函式為什麼要用一個for迴圈才能收全所有的內容?至少其中一種可能性是因為UNIX的訊號處理機制。        在我的程式設計理念中,UNIX下的訊號是一個徒增麻煩的東西,這也許是非控制檯的Windows程式中沒有訊號的原因。

socket程式設計send recv阻塞和非阻塞詳解

int send( SOCKET s, const char FAR *buf, int len, int flags ); 不論是客戶還是伺服器應用程式都用send函式來向TCP連線的另一端傳送資料。客戶程式一般用send函式向伺服器傳送請求,而伺服器則通常用send函