當前位置:首頁 » 編程語言 » tcpc語言

tcpc語言

發布時間: 2024-01-18 09:59:49

Ⅰ Windows系統用C語言寫TCP通信

#include
#include
#include
#pragma comment(lib,"ws2_32.lib")
typedef struct{
SOCKET accpt;
int lock;
}Arg;
void *transfer(void *arg)
{
Arg * info = (Arg *)arg;
SOCKET clientSock;
char recvbuf[102];
char sendBuf[] = "10";
int ret;
memcpy(&clientSock,(void*)&info->accpt,sizeof(clientSock));
info->lock =1;
while (TRUE)
{
ret = send(clientSock,sendBuf,2,0);
if (ret == -1)
{
break;
}
ret = recv(clientSock,recvbuf,102,0);
printf("%s\n",recvbuf);
}
return (void *)0;
}
void* timer(void *arg)
{
time_t last = time(NULL);
time_t now;
int i = 20;
while(i--)
{
now = time(NULL);
if(now - last == 1)
{
printf("1s past!\n");
last = now;
}
Sleep(500);
}
printf("timer exit.\n");
return (void *)0;
}
int main(void) {
WSADATA wsaData;
SOCKET ListenSocket;
SOCKADDR_IN service,client;
int len = sizeof(client);
Arg argument;
pthread_t tid;
char sendBuf[] = "ID=2;WHAT=host";
int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != NO_ERROR) {
printf("Error at WSAStartup()\n");
return 1;
}
ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ListenSocket == INVALID_SOCKET) {
printf("Error at socket(): %ld\n", WSAGetLastError());
WSACleanup();
return 1;
}
service.sin_family = AF_INET;
service.sin_addr.s_addr = inet_addr("127.0.0.1");
service.sin_port = htons(27115);
if (bind( ListenSocket,
(SOCKADDR*) &service,
sizeof(service)) == SOCKET_ERROR) {
printf("bind() failed.\n");
closesocket(ListenSocket);
WSACleanup();
return 1;
}
if (listen( ListenSocket, 1 ) == SOCKET_ERROR) {
printf("Error listening on socket.\n");
closesocket(ListenSocket);
WSACleanup();
return 1;
}
argument.lock = 1;
printf("Waiting for client to connect...\n");
pthread_create(&tid,NULL,timer,NULL);
while(TRUE){
argument.accpt = accept( ListenSocket, (SOCKADDR*)&client, &len );
if (argument.accpt == INVALID_SOCKET) {
printf("accept failed: %d\n", WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1;
} else {
printf("accept%s:%d\n",inet_ntoa(client.sin_addr),client.sin_port);
while (!argument.lock);
argument.lock = 0;
// sendto(argument.accpt,sendBuf,sizeof(sendBuf),0,(SOCKADDR*)&client,len);
pthread_create(&tid,NULL,transfer,&argument);
//send(AcceptSocket,sendBuf,sizeof(sendBuf),0);
}
}
// No longer need server socket
closesocket(ListenSocket);
WSACleanup();
return 0;
}

Ⅱ C語言編寫TCP的文件傳輸

粗略看了一下,你是用戶的是TCP不是UDP,注意一點TCP可靠安全但是需要你自己手動處理粘包問題.你要是想學網路編程,就需要學會分析和定製協議.我建議你先去看看Tftp的網路協議.所謂的通信就是我發請求給你,你給我應答(請求成功還是失敗).你剛學網路編程,直接是使用tcp不是很合適,你可以去看看TFTP的協議(向伺服器請求下載或者上傳文件).復雜一點的程序一搬都需要定製網路協議,tcp則還需要處理粘包問題.如果你想學,可以和我聯系,我可以發你資料→_→

Ⅲ 求C語言高手,實現一個簡單的TCPIP程序以實現兩台計算機之間的聊天通信,

哥們你電氣幾班的啊。。

Ⅳ 用C語言幫忙寫一個「TCP Client/Server模式的通信程序設計與實現」

CLIENT:
#include <stdio.h>
#include <stdio.h>
#include <winsock.h>
#pragma comment(lib,"Ws2_32")

#define PORT 6666 /* 客戶機連接遠程主機的埠 */
#define MAXDATASIZE 100 /* 每次可以接收的最大位元組 */
int main()
{
int sockfd, numbytes;
char buf[MAXDATASIZE];
char msg[MAXDATASIZE];
char *argv="127.0.0.1";
struct sockaddr_in their_addr; /* 對方的地址埠信息 */

WSADATA ws;WSAStartup(MAKEWORD(2,2),&ws); //初始化Windows Socket Dll
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
//如果侍基建立socket失敗,退出程序
printf("socket error\n");
exit(1);
}

//連接對方
their_addr.sin_family = AF_INET; /* 協議類型是INET */
their_addr.sin_port = htons(PORT); /* 連接對方PORT埠悔洞 */
their_addr.sin_addr.s_addr = inet_addr(argv); /* 連接對方老前謹的IP */
if (connect(sockfd, (struct sockaddr *)&their_addr,sizeof(struct sockaddr)) == -1)
{
//如果連接失敗,退出程序
printf("connet error\n");
closesocket(sockfd);
exit(1);
}

while(1){
scanf("%s",msg);
//發送數據
if (send(sockfd, msg, MAXDATASIZE, 0) == -1)

{
printf("send error");
closesocket(sockfd);
exit(1);
}

//接收數據,並列印出來
if ((numbytes=recv(sockfd, buf, MAXDATASIZE, 0)) == -1)
{
//接收數據失敗,退出程序
printf("recv error\n");
closesocket(sockfd);
exit(1);
}
buf[numbytes] = '\0';
printf("Received: %s\n",buf); }
closesocket(sockfd);
return 0;
}

SERVER:

#include <stdio.h>
#include <winsock.h>
#pragma comment(lib,"Ws2_32")
#define MYPORT 6666 /*定義用戶連接埠*/
#define BACKLOG 10 /*多少等待連接控制*/ #define MAXDATASIZE 100
int main()
{
int sockfd, new_fd; /*定義套接字*/
struct sockaddr_in my_addr; /*本地地址信息 */
struct sockaddr_in their_addr; /*連接者地址信息*/
int sin_size,numbytes; char msg[10],buf[MAXDATASIZE];
WSADATA ws;
WSAStartup(MAKEWORD(2,2),&ws); //初始化Windows Socket Dll
//建立socket
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
//如果建立socket失敗,退出程序
printf("socket error\n");
exit(1);
}
//bind本機的MYPORT埠
my_addr.sin_family = AF_INET; /* 協議類型是INET */
my_addr.sin_port = htons(MYPORT); /* 綁定MYPORT埠*/
my_addr.sin_addr.s_addr = INADDR_ANY; /* 本機IP*/
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))== -1)
{
//bind失敗,退出程序
printf("bind error\n");
closesocket(sockfd);
exit(1);
}

//listen,監聽埠
if (listen(sockfd, BACKLOG) == -1)
{
//listen失敗,退出程序
printf("listen error\n");
closesocket(sockfd);
exit(1);
}
printf("listen...");
//等待客戶端連接
sin_size = sizeof(struct sockaddr_in);
if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1)
{
printf("accept error\n");
closesocket(sockfd);
exit(1);
}
printf("\naccept!\n");

while(1) {
if((numbytes=recv(new_fd, buf, MAXDATASIZE, 0)) == -1) continue;

if(!strcmp(buf,"bye"))
{
//成功,關閉套接字

closesocket(sockfd);
closesocket(new_fd);
return 0;
}
printf("%s %d",buf,strlen(buf));
sprintf(msg,"%d",strlen(buf));

if (send(new_fd,msg,MAXDATASIZE, 0) == -1)

{
printf("send ERRO");
closesocket(sockfd);
closesocket(new_fd);
return 0;
}
}
}

Ⅳ 怎麼用C語言寫三次握手協議

雖然我以前編寫過、現在已經很久沒有使用 C 語言編寫 TCP/IP 協議的三次握手協議了(即:網路 socket編程),但是我可以給你提供一個基本編程思路:首先 TCP/IP 三次握手協議是基於面向連接的網路協議,而且它是分為 server/client 進行編寫程序的。需要分別編寫 server 端、以及 client 端的代碼的,涉及到的主要函數有:bind( )、listen( )、accept( )、read( )、write( ) 等庫函數,具體的編程方法你可以參考《TCP/IP 詳解:卷 2:實現》一書。
最簡單的功能就是:在一台電腦上發送數據,而在另外一台電腦上接收數據。就有點類似功能最簡單、且無任何界面的聊天程序。

Ⅵ 怎麼樣用出C語言寫一個分析TCP/IP報文的程

socket編程寫了一個簡單的DNS伺服器。
是這樣實現的,用兩台PC,一個做客戶端,一個做伺服器;
在伺服器用socket監視53埠,recvfrom()函數負責接收DNS查詢報文,將其存入事先寫好的數據結構里;
因為DNS查詢報文和應答報文的前部分欄位格式都是一樣的,只是修改了幾個參數,然後重點把DNS應答報文後面的欄位進行增添。
然後用sendto();函數發送就可以了。
在ie裡面輸入任意的網址,回車,就會觸發客戶端向伺服器發出DNS查詢報文,
此時你可以同時在伺服器和客戶端抓包,看收到的報文是否正確。

注意幾點:
1、一定要熟悉報文結構,定義合適的結構體,將報文進行解析
2、一定要注意網路序和主機序的轉換htonl(),htons(),ntohl(),ntohs()等
3、找個熟知埠,最好是你熟悉的協議,如ftp,http,dns等。
4、客戶端要把DNS伺服器配置為你的伺服器ip

熱點內容
奇駿哪個配置性價比 發布:2024-11-29 22:25:21 瀏覽:702
漢娜資料庫 發布:2024-11-29 22:25:17 瀏覽:703
伺服器和收銀機怎麼連接 發布:2024-11-29 22:24:11 瀏覽:608
關鍵詞排名源碼 發布:2024-11-29 22:22:03 瀏覽:72
禪道伺服器ip是什麼 發布:2024-11-29 22:22:02 瀏覽:808
參貪心演算法 發布:2024-11-29 21:54:24 瀏覽:340
php統計數組元素 發布:2024-11-29 21:46:08 瀏覽:195
健康和解壓哪個重要 發布:2024-11-29 21:40:07 瀏覽:749
聯通網的密碼去哪裡找 發布:2024-11-29 21:38:57 瀏覽:849
jscookie加密 發布:2024-11-29 21:33:03 瀏覽:40