當前位置:九游会j9娱乐平台-九游ag登录中心网址 » 編程語言 » tcpc語言

tcpc語言-九游会j9娱乐平台

發布時間: 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
#include
#include
#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
#include
#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-01-20 00:52:13 瀏覽:248
caccess查詢資料庫 發布:2024-01-20 00:43:10 瀏覽:769
xp文件夾圖標更改 發布:2024-01-20 00:43:03 瀏覽:19
python和node 發布:2024-01-20 00:37:12 瀏覽:194
android拖拉 發布:2024-01-20 00:00:49 瀏覽:583
少兒編程課程體系介紹 發布:2024-01-20 00:00:48 瀏覽:846
我說你做下載ftp 發布:2024-01-20 00:00:47 瀏覽:8
安卓驅動培訓哪裡好 發布:2024-01-19 23:55:41 瀏覽:987
python轉為字元串 發布:2024-01-19 23:51:39 瀏覽:272
合同文件夾 發布:2024-01-19 23:50:52 瀏覽:740
网站地图