導航:首頁 > 配伺服器 > c語言地址傳給伺服器

c語言地址傳給伺服器

發布時間:2022-11-30 04:06:06

A. 如何用C語言實現向某個IP發送數據包(例如4個浮點數)

使用socket編程即可。
1、網路的Socket數據傳輸是一種特殊的I/O,Socket也是一種文件描述符。Socket也具有一個類似於打開文件的函數調用Socket(),該函數返回一個整型的Socket描述符,隨後的連接建立、數據傳輸等操作都是通過該Socket實現的。

2、下面用Socket實現一個windows下的c語言socket通信例子,這里客戶端傳遞一個字元串,伺服器端進行接收。

【伺服器端】
#include "stdafx.h"
#include <stdio.h>
#include <winsock2.h>
#include <winsock2.h>
#define SERVER_PORT 5208 //偵聽埠
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int ret, nLeft, length;
SOCKET sListen, sServer; //偵聽套接字,連接套接字
struct sockaddr_in saServer, saClient; //地址信息
char *ptr;//用於遍歷信息的指針
//WinSock初始化
wVersionRequested=MAKEWORD(2, 2); //希望使用的WinSock DLL 的版本
ret=WSAStartup(wVersionRequested, &wsaData);
if(ret!=0)
{
printf("WSAStartup() failed!\n");
return;
}
//創建Socket,使用TCP協議
sListen=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sListen == INVALID_SOCKET)
{
WSACleanup();
printf("socket() faild!\n");
return;
}
//構建本地地址信息
saServer.sin_family = AF_INET; //地址家族
saServer.sin_port = htons(SERVER_PORT); //注意轉化為網路位元組序
saServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //使用INADDR_ANY 指示任意地址

//綁定
ret = bind(sListen, (struct sockaddr *)&saServer, sizeof(saServer));
if (ret == SOCKET_ERROR)
{
printf("bind() faild! code:%d\n", WSAGetLastError());
closesocket(sListen); //關閉套接字
WSACleanup();
return;
}

//偵聽連接請求
ret = listen(sListen, 5);
if (ret == SOCKET_ERROR)
{
printf("listen() faild! code:%d\n", WSAGetLastError());
closesocket(sListen); //關閉套接字
return;
}

printf("Waiting for client connecting!\n");
printf("Tips: Ctrl+c to quit!\n");
//阻塞等待接受客戶端連接
while(1)//循環監聽客戶端,永遠不停止,所以,在本項目中,我們沒有心跳包。
{
length = sizeof(saClient);
sServer = accept(sListen, (struct sockaddr *)&saClient, &length);
if (sServer == INVALID_SOCKET)
{
printf("accept() faild! code:%d\n", WSAGetLastError());
closesocket(sListen); //關閉套接字
WSACleanup();
return;
}
char receiveMessage[5000];
nLeft = sizeof(receiveMessage);
ptr = (char *)&receiveMessage;
while(nLeft>0)
{
//接收數據
ret = recv(sServer, ptr, 5000, 0);
if (ret == SOCKET_ERROR)
{
printf("recv() failed!\n");
return;
}
if (ret == 0) //客戶端已經關閉連接
{
printf("Client has closed the connection\n");
break;
}
nLeft -= ret;
ptr += ret;
}
printf("receive message:%s\n", receiveMessage);//列印我們接收到的消息。

}
// closesocket(sListen);
// closesocket(sServer);
// WSACleanup();
}
【客戶端】
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#define SERVER_PORT 5208 //偵聽埠
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int ret;
SOCKET sClient; //連接套接字
struct sockaddr_in saServer; //地址信息
char *ptr;
BOOL fSuccess = TRUE;
//WinSock初始化
wVersionRequested = MAKEWORD(2, 2); //希望使用的WinSock DLL的版本
ret = WSAStartup(wVersionRequested, &wsaData);
if(ret!=0)
{
printf("WSAStartup() failed!\n");
return;
}
//確認WinSock DLL支持版本2.2
if(LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wVersion)!=2)
{
WSACleanup();
printf("Invalid WinSock version!\n");
return;
}
//創建Socket,使用TCP協議
sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sClient == INVALID_SOCKET)
{
WSACleanup();
printf("socket() failed!\n");
return;
}
//構建伺服器地址信息
saServer.sin_family = AF_INET; //地址家族
saServer.sin_port = htons(SERVER_PORT); //注意轉化為網路節序
saServer.sin_addr.S_un.S_addr = inet_addr("192.168.1.127");
//連接伺服器
ret = connect(sClient, (struct sockaddr *)&saServer, sizeof(saServer));
if (ret == SOCKET_ERROR)
{
printf("connect() failed!\n");
closesocket(sClient); //關閉套接字
WSACleanup();
return;
}

char sendMessage[]="hello this is client message!";
ret = send (sClient, (char *)&sendMessage, sizeof(sendMessage), 0);
if (ret == SOCKET_ERROR)
{
printf("send() failed!\n");
}
else
printf("client info has been sent!");
closesocket(sClient); //關閉套接字
WSACleanup();
}

B. 在c語言中客戶端將自己的ip地址傳給伺服器,伺服器怎樣接收輸出

將ip地址轉成4個位元組的char類型,再send,然後伺服器解析出ip地址;
不過你要這個干嗎?直接調用api就能獲取客戶端ip地址

C. C語言傳地址調用

1、值傳遞:不管怎麼傳,原來的實參的值都不會改變。
地址傳遞,原來的實參的值可能被改變。
打個比方:
值傳遞就好象你告訴別人你的帳戶里有多少錢 帳戶里的錢不會改變。
地址傳遞就好象你告訴別人你的帳戶密碼 帳戶裡面的錢可以被改變。

2、例如:
#include<stdio.h>
point(char *pt)
main()
{char b[4]={'m','n','o','p'},*pt=b;
point(pt);
printf("%c\n",*pt);
}
point(char *p)
{p+=3;
*p='F';}//加上這一句就變了

D. C語言數組的地址傳遞和值傳遞

1.值傳遞就不寫了,顧名思義就是把當前的值傳到下一個函數中,變數本身的沒有發生任何變化

2.指針傳遞,把當前變數指針傳到下一個函數,在另外函數里邊修改指針的值會修改當前變數值

#include <stdio.h>

  void func(int *p){

                *p = 9;

                return;

    }

void swap(int *a, int *b){ //交換兩個變數的值

        int temp = *a;

        *a = *b;

        *b = temp;

}

int main(void){

            int a = 0;

            func(&a); //要修改一個變數,把他的地址傳過去

            printf("%d",a);//9

            int b = 3;int c = 4;

            swap(&b,&c);

            return 0;

}

E. 說C語言中函數值傳遞與地址傳遞的方法

先舉個簡單例子:
#include <iostream>
using namespace std;
void Add1(int *a)
{
(*a)++;
}
void Add2(int a)
{
a++;
}
int main()
{
int x=1,y=5;
Add1(&x);
Add2(y);
cout<<x<<" "<<y<<endl;
return 0;
}
輸出:
2 5
這兩個自加函數中,Add1是指針傳遞,Add2是數值傳遞,
在調用Add2(y)時,系統是先建造一個int型變數a,再將y的值傳給a(此時y和a是兩個不同地址的變數,只是兩者值相同),然後a++,卻對y沒有任何操作,故在函數調用結束後,釋放a,而y沒任何變化;
在調用Add1(&x)時,系統先建造int型指針a,然後將實參x的地址傳給了指針a,故此時a與&x是指向同一地址,即共享統一數據,當對地址a內的數據進行操作,就是對x進行操作。a++時自然也對x++,當函數調用結束,指針a釋放掉,x的值此時已經發生了變化。
這就是兩者不同,地址傳遞的參數都是指針類型,於數值傳遞不一樣。
至於選擇那種傳遞,就要看這個程序的具體目的和功能了,一般要對參數進行修改的要用地址傳遞,而只是調用參數的數據進行其他計算並不需要修改數據本身宜用數值傳遞。
還有什麼不明白嗎

F. c語言傳值和傳地址

輸出:

調用函數前輸出結果:

nums[1]=0

nums[2]=0

nums[3]=0

nums[4]=0

value = 0

因為循環變數初值是1,所以nums[0]不會輸出

findMax(nums,value); //調用findMax,vals指向nums開始元素,m=0

i=1;[i=1],i<MAXELS成立,開始循環,vals[i]=1,nums[0,1,0,0,0],輸出:vals[1]=1

i++;[i=2],i<MAXELS成立,繼續循環,vals[i]=1,nums[0,1,1,0,0],輸出:vals[2]=1

i++;[i=3],i<5成立,繼續循環,vals[i]=1,nums[0,1,1,1,0],輸出:vals[3]=1

i++;[i=4],i<5成立,繼續循環,vals[i]=1,nums[0,1,1,1,1],輸出:vals[4]=1

i++;[i=5],i<5不成立,結束循環,輸出:m=1

函數返回,m被舍棄,輸出:

調用函數後輸出結果:

nums[1]=1

nums[2]=1

nums[3]=1

nums[4]=1

value = 0

由於子程序中沒有計算過m,所以m值一直是初始的1,這個m是函數自己臨時定義的變數,用來接收調用者傳進來的參數,main函數將vale的值0傳遞給m,計算完後,函數返回,m被舍棄,不會影響value的值(作為參數,是取value的值來用一下,然後就沒有value的事了)

如果想將m的值返回,那麼有兩種辦法:

  1. 函數寫成:void findMax(int vals[],int *m),然後函數中用到m的地方都改成*m,調用時findMax(nums,&value);

  2. 函數寫成:int findMax(int vals[],int m),函數最後寫return m;調用時value=findMax(nums,value);

如果子程序不需要value作為m的初始值,則可省略第2個參數:int findMax(int vals[]),調用:value=findMax(nums);

閱讀全文

與c語言地址傳給伺服器相關的資料

熱點內容
蘋果手機怎麼把圖片做成文件夾發送給別人 瀏覽:728
利用python實現數據可視化 瀏覽:829
js接收php數據 瀏覽:165
為什麼程序員天生就適合做管理者 瀏覽:754
創維雲app怎麼連接電視 瀏覽:168
將命令方塊 瀏覽:136
安卓照片怎麼去掉位置信息 瀏覽:19
木刻解壓視頻大全 瀏覽:881
單片機紅外計數 瀏覽:960
江西物聯網守時模塊伺服器雲主機 瀏覽:867
java反射好處 瀏覽:125
ftp伺服器地址列表 瀏覽:756
蘋果下載過的app怎麼看 瀏覽:317
命令行啟動oracle 瀏覽:887
本機文件夾如何轉移cd卡 瀏覽:34
app怎麼設置注音 瀏覽:375
學生選修管理系統源碼 瀏覽:494
馬卡龍pdf 瀏覽:235
武漢python爬蟲培訓 瀏覽:396
微信伺服器連接失敗是什麼原因 瀏覽:694