導航:首頁 > 編程語言 > c語言socket通信編程

c語言socket通信編程

發布時間:2023-02-07 08:41:56

A. C語言socket編程

send用戶名和密碼,然後再伺服器判斷這段字元串的賬號密碼是否符合,然後客戶端recv,如果recv的字元串是登錄成功,才進行下面操作.否則就提示用戶名和密碼有誤.

B. C語言Socket編程問題(互相通信)

客戶端與伺服器建立連接
客戶端調用connect函數時,已經知道伺服器的IP地址以及埠號
伺服器中accept返回的套接字中,包含客戶端的IP地址以及埠號
建立的連接是相互的,所以可以互通消息。

C. C語言socket編程怎麼實現2個客戶端之間通信

兩個單獨的客戶端是沒法通信的,必須經過伺服器。
伺服器和客戶端連接過程如下:
客戶端:
socket-->connect-->read/write
伺服器:
socket-->bind-->listen-->accept-->write/read
若要通訊必須要有伺服器,只有在connect和accept建立好連接之後才能真正的通信。
如果你是問編程的流程或者上述函數的意義和用法網路上一大堆。

D. C語言socket編程要怎麼實現伺服器可以發消息給客戶端

先要理解socket是什麼?
簡單的說socket是一個全雙工的通信通道,
即使用TCP或者UDP通信時均可以在發送消息的同時接受消息,
它不區分是否是伺服器。
根據這個概念你的問題就很好回答。
》當客戶端與伺服器連接後。有什麼方法使伺服器可以隨時隨地發消息給客戶端?
》我現在只能。客戶端發個消息給伺服器。伺服器才能發個消息給客戶端。也就是說客戶端不發消息。伺服器就沒法發消息給客戶端。
》求大牛給個思路。當連接後。客戶端與伺服器雙方可以隨時隨地通信!
使用多線程,一個維持接受邏輯,一個維持送信邏輯,即可完成同時接受及發送。
客戶端及伺服器端均做上述設置。
而你的做法是在一個線程中執行接受與送信,因此只能按照順序邏輯完成接收與送信。
關鍵點是多線程。

E. C語言socket編程實現網路數據傳輸

僅供參考

// serverTCP.cpp : 定義控制台應用程序的入口點。
//

#include "stdafx.h"
using namespace std;
long long cnt = 0;
void transFile(SOCKET s)
{
printf("新子服務%d......",cnt);
send(s,"welcome to TCP FILE SERVER !",strlen("welcome to TCP FILE SERVER !")+1,0);

char Buf[BUFSIZE];

FILE *fp;
//printf("客戶端已打開\n請輸入存放文件地址:\n");
char FilePath[128]={"0"};
ltoa(cnt,FilePath,10);

if((fp=fopen(FilePath,"wb"))==NULL)
{
printf("文件未打開\n");
return;
}
else
{
send(s,"開始傳送",strlen("開始傳送")+1,0);
//得到文件大小
char Size[20];
long int FileSize=0;
recv(s,Size,21,0);
FileSize=atol(Size);
printf("得到文件大小: %d\n",FileSize);
//開始傳送

char Block[BUFSIZE];
long int x=0;
while (1)
{
x += BUFSIZE;
if(x < FileSize)
{
recv(s,Block,BUFSIZE+1,0);
fwrite(Block,1,BUFSIZE,fp);
}
else
{
recv(s,Block,FileSize+BUFSIZE-x+1,0);
printf("文件接收完畢\n");
fwrite(Block,1,FileSize+BUFSIZE-x,fp);
fclose(fp);
break;
}
}
}
fclose(fp);
closesocket(s);

}
int _tmain(int argc, _TCHAR* argv[])
{

WORD myVersionRequest;
WSADATA wsaData;
myVersionRequest=MAKEWORD(1,1);
int err;
err = WSAStartup(myVersionRequest,&wsaData);
if (!err)
{
printf("伺服器啟動......\n");
}
else
{
printf("伺服器啟動失敗!");
exit(0);
}
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(PORTBASE);//綁定埠
bind(serSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR));//綁定完成
listen(serSocket,ACESIZE);//其中第二個參數代表能夠接收的最多的連接數

SOCKADDR_IN clientAddr;
int len = sizeof(SOCKADDR);
while(1)
{
cnt++;
SOCKET serConn;
serConn = accept(serSocket,(SOCKADDR*)&clientAddr,&len);//如果這里不是accept而是conection的話。。就會不斷的監聽
if(_beginthread((void (*)(void *))transFile, ACESIZE,(void *)serConn) < 0) return 0;
}

return 0;
}

// clientTCP.cpp : 定義控制台應用程序的入口點。
//

#include "stdafx.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
WORD myVersionRequest;
WSADATA wsaData;
myVersionRequest=MAKEWORD(1,1);
int err;
err=WSAStartup(myVersionRequest,&wsaData);
if (!err)
{
printf("已打開套接字\n");
}
else
{
//進一步綁定套接字
printf("套接字未打開!");
return 0;
}
SOCKET cliSocket =socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addr;
char ip_addr[16]={"127.0.0.1"};
addr.sin_addr.S_un.S_addr=inet_addr(ip_addr);
addr.sin_family=AF_INET;
addr.sin_port=htons(PORT);

char ACK[64];
connect(cliSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR));//開始連接

recv(cliSocket,ACK,sizeof(ACK),0);
printf("%s\n",ACK);
FILE *fp;
int FileSize=0;

char Block[BUFSIZE]={"0"};
char FilePath[128]={"0"};
int i=0;
do
{
printf("請輸入文件地址:\n");
gets(FilePath);
i = 0;
if((fp=fopen(FilePath,"rb"))==NULL)
{
i = 1;
printf("文件打開失敗\n");
}
}while(i);
fseek(fp,0L,SEEK_END);
FileSize=ftell(fp);
printf("待傳送文件大小: %d\n",FileSize);
printf("等待伺服器接受......\n");

recv(cliSocket,Block,sizeof(Block),0);
printf("%s\n",Block);
if(strcmp(Block,"開始傳送")==0)
{
char Size[20];
ltoa(FileSize,Size,10);
send(cliSocket,Size,sizeof(Size),0);
fseek(fp,0L,SEEK_SET);

long int y=0;
char trans[BUFSIZE];
while(!feof(fp))
{
fread(trans,1,BUFSIZE,fp);
y=y+BUFSIZE;
if(y<FileSize)
{
send(cliSocket,trans,BUFSIZE+1,0);
}
else
{
send(cliSocket,trans,FileSize+BUFSIZE-y+1,0);
closesocket(cliSocket);
WSACleanup();
}
}
}
printf("文件發送完畢\n");
fclose(fp);
closesocket(cliSocket);
WSACleanup();
system("pause");
return 0;
}

F. 在windows下用C語言如何實現socket網路編程,需要用到哪些頭文件或者庫

需要用到的頭文件包含:

#include <winsock2.h>

#include <windows.h>

與Linux環境下socket編程相比,windows環境多了一個步驟:啟動或者初始化winsock庫

Winsock,一種標准API,一種網路編程介面,用於兩個或多個應用程序(或進程)之間通過網路進行數據通信。具有兩個版本:

Winsock 1:

Windows CE平台支持。

頭文件:WinSock.h

庫:wsock32.lib

Winsock 2:

部分平台如Windows CE貌似不支持。通過前綴WSA可以區別於Winsock 1版本。個別函數如WSAStartup、WSACleanup、WSARecvEx、WSAGetLastError都屬於Winsock 1.1規范的函數;

頭文件:WinSock2.h

庫:ws2_32.lib

mswsock.h用於編程擴展,使用時必須鏈接mswsock.dll

(6)c語言socket通信編程擴展閱讀

winsock庫的載入與卸載:

載入:int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);

載入成功,返回值為0。

WORD wVersionRequested:載入的winsock版本,使用宏MAKEWORD(x, y),x表示高位元組,y表示低位元組。然而使用時MAKEWORD(2, 2)。高位元組與低位元組相同~~

LPWSADATA lpWSAData:WSADATA結構的指針,傳入參數後,系統幫助我們填充版本信息。有興趣的可以看看結構體內容,不過基本用不著。

卸載:int WSACleanup(void);比起載入,卸載的函數真是輕松愉快。

G. C語言實現socket編程TCP通信的問題

我做試驗,發現是如果你這樣寫:
char sendbuf[1024] = {"123456\n"};
也就是發送數據加上了換行,服務端立即顯示了。看來不加換行就被緩存了(應該是被服務端收到但緩存了)。

H. 誰能用C語言寫個最簡單socket通信服務端和客戶端示例

網路的Socket數據傳輸是一種特殊的I/O,Socket也是一種文件描述符。Socket也具有一個類似於打開文件的函數調用Socket(),該函數返回一個整型的Socket描述符,隨後的連接建立、數據傳輸等操作都是通過該Socket實現的。
下面用Socket實現一個windows下的c語言socket通信例子,這里我們客戶端傳遞一個字元串,伺服器端進行接收。
【伺服器端】
#include "stdafx.h"
#include <stdio.h>
#include <winsock2.h>
#include <winsock2.h>
#define SERVER_PORT 5208 //偵聽埠
void main()

閱讀全文

與c語言socket通信編程相關的資料

熱點內容
白夜是什麼小說主角 瀏覽:651
可以直接觀看網站 瀏覽:53
女主開發了男主菊的小說 瀏覽:296
程序員陸漓懷孕第幾集 瀏覽:600
proe命令講解 瀏覽:24
yp99 76.c om 瀏覽:751
看片不用花錢的網站 瀏覽:983
主角叫凌天的小說 瀏覽:328
電影鴨王1完整版百度網盤 瀏覽:501
國產四級在線觀看 瀏覽:393
《斜陽若影》女穿男 瀏覽:756
男人從墳墓里爬出來報復出軌妻子的美國電影名字 瀏覽:485
女主叫小米的電視 瀏覽:291
淘寶小米雲伺服器 瀏覽:957
如何發送app請帖 瀏覽:114
大今長令 瀏覽:632
玩操正太電影 瀏覽:682
伺服器如何添加自啟軟體 瀏覽:489
小時候的一部台灣電影的名字 瀏覽:510
為什麼看片的網站都看不了了 瀏覽:476