導航:首頁 > 編程系統 > linuxc語言發送數據包

linuxc語言發送數據包

發布時間:2024-07-12 06:44:40

1. 在linux用c語言寫的socket傳文件。伺服器以二進制流打開文件並發送,客戶端接收並寫入文件。

傳輸的時候沒問題,主要是寫的時候,這有個文件編碼的問題,編碼統一就好了。

2. 如何在linux下用c語言編寫一個能夠發送icmp報文的小程序

需要建立來socket,參數是AF_INET,SOCK_RAW,IPPROTO_ICMP

自己構自造ICMP數據包,sendto發送給某地址。

ICMP有多種,你可以發送type為13的時間戳請求。

然後調用recvfrom會收到type為14的timestampreply的IP包,

IP頭一般是20Bytes,裡麵包含srcIP,desIP還有TTL等。

IP包的數據就是返回ICMPtimestampreply報文,裡面有origTimestamp,recvTimestamp,transStamp,可以計算出時間。

可以參考網頁鏈接網頁鏈接

覺得有幫助可以注冊帳號,給他點個「星」

3. 請教用C語言編的藉助UDP協議實現的文件傳輸的程序

本程序在 Windows 7 Visual Studio 2015 和 Linux Ubuntu 15.04 GCC 5.11 下均編譯運行測試通過。

本程序支持 Windows 和 Linux 之間傳送文件,如果要在 Windows 和 Linux 之間傳送文件,文件名不能出現中文。

本程序支持無線 WiFi,支持 USB 收發器,但僅支持區域網內傳送文件,傳送文件需要輸入對方的 IP 地址。

本程序包括伺服器端和客戶端,既可以發送文件又可以接收文件。如果要在同一台機器上測試需要同時打開兩個程序。

Windows 下查看本機 IP 地址的命令是:

ipconfig

Linux 下查看本機 IP 地址的命令是:

ifconfig

以下是程序代碼

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

#ifdef_MSC_VER
#include<winsock2.h>
#include<windows.h>
#pragmacomment(lib,"ws2_32.lib")
#else
#include<pthread.h>
#include<unistd.h>
#include<signal.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#endif

//存放發送接收字元數組大小
#defineSIZEA65501
//每次發送接收位元組數
#defineSIZEB65500

typedefstructsockaddr_inSockAddrIn;
SockAddrInserverAddr,remoteAddr,clientAddr;

//埠號
intiServerPort,iClientPort;
//新建socket信息
intiUDP;

//字元串轉整型
intstrToInt(char*acStr)
{
inti,iIndex=0,iNum=0,iSize=0;
if(acStr[0]=='+'||acStr[0]=='-')
iIndex=1;

for(iSize=iIndex;;iSize++)
if(acStr[iSize]<'0'||acStr[iSize]>'9')
break;

for(i=iIndex;i<iSize;i++)
iNum+=(int)pow(10,iSize-i-1)*(acStr[i]-48);

if(acStr[0]=='-')
iNum=-iNum;

returniNum;
}

//整型轉字元串
voidintToStr(intiInt,char*acStr)
{
intiIndex=0,iSize,iNum,iBit,i,j;

if(iInt<0)
{
acStr[0]='-';
iInt=-iInt;
iIndex=1;
}
for(i=0;;i++)
if(iInt<pow(10,i))
break;
iSize=i;

for(i=0;i<iSize;i++)
{
iNum=pow(10,iSize-i-1);
iBit=iInt/iNum;
iInt-=iNum*iBit;
acStr[i+iIndex]=iBit+48;
}
if(iSize!=0)
acStr[iSize+iIndex]='';
else
{
acStr[0]='0';
acStr[1]='';
}
}

voidsleepUDP(intiSleep)
{
#ifdef_MSC_VER
Sleep(iSleep);
#else
usleep(iSleep*1000);
#endif
}

voidopenUDP(char*acIpAddr)
{
#ifdef_MSC_VER
//Winsows啟用socket
WSADATAwsadata;
if(WSAStartup(MAKEWORD(1,1),&wsadata)==SOCKET_ERROR)
{
printf("啟用socket失敗 ");
exit(0);
}
#endif

//新建socket
if((iUDP=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==-1)
{
printf("新建socket失敗 ");
exit(0);
}

//清零
memset(&serverAddr,0,sizeof(serverAddr));
memset(&clientAddr,0,sizeof(clientAddr));

//設置協議IP地址及Port
serverAddr.sin_family=AF_INET;
serverAddr.sin_port=htons(iServerPort);
serverAddr.sin_addr.s_addr=htonl(INADDR_ANY);

clientAddr.sin_family=AF_INET;
clientAddr.sin_port=htons(iClientPort);
clientAddr.sin_addr.s_addr=inet_addr(acIpAddr);

//綁定埠,監聽埠
if(bind(iUDP,(structsockaddr*)&serverAddr,sizeof(serverAddr))==-1)
{
printf("綁定埠失敗 ");
exit(0);
}
}

voidcloseUDP(void)
{
#ifdef_MSC_VER
//Winsows關閉socket
closesocket(iUDP);
WSACleanup();
#endif
}

//要發送的字元串
characSendStr[SIZEA];
//接收到的字元串
characRecvStr[SIZEA];
//請求信息
characReq[SIZEA];
//文件名字元串
characFileName[SIZEA];
//文件位元組數字元串
characFileSize[SIZEA];

intiSize,iNameSize;

//接收文件名
#ifdef_MSC_VER
DWORDWINAPIrecvName(LPVOIDp)
#else
void*recvName(void*arg)
#endif
{
intiAddrSize=sizeof(remoteAddr);
acReq[0]='n';acReq[1]='a';acReq[2]='m';acReq[3]='e';acReq[4]='';
acRecvStr[0]='';
printf("%s ","正在發送請求信息!");
//發送請求信息
sendto(iUDP,acReq,strlen(acReq),0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
//每次發送請求信息後等待一段時間
sleepUDP(10);
//接收文件名
iSize=recvfrom(iUDP,acRecvStr,SIZEB,0,(structsockaddr*)&remoteAddr,&iAddrSize);
return0;
}

//接收文件
voidrecvFile(char*acDirName,char*acIpAddr)
{
FILE*pFile=NULL;
inti,iFileSize,iRecvNum,iAddrSize=sizeof(remoteAddr);
//路徑文件名
characDirAndFileName[SIZEA];

openUDP(acIpAddr);
//接收文件名
for(;;)
{
//創建線程
#ifdef_MSC_VER
HANDLEhThread;
DWORDthreadId;
hThread=CreateThread(NULL,0,recvName,0,0,&threadId);
//每次發送後等待一段時間
sleepUDP(1000);
//強制終止線程
TerminateThread(hThread,0);
#else
pthread_tthread;
void*thread_arg=(pthread_t)0;
pthread_create(&thread,NULL,recvName,(void*)&thread_arg);
//每次發送後等待一段時間
sleepUDP(1000);
//強制終止線程
pthread_cancel(thread);
#endif
if(acRecvStr[0]!='')
{
acRecvStr[iSize]='';
printf("文件名為:%s ",acRecvStr);
break;
}
}

acDirAndFileName[0]='';
strcat(acDirAndFileName,acDirName);
//連接路徑名和文件名
strcat(acDirAndFileName,acRecvStr);
//如果已經有這個文件了就清空文件內容
pFile=fopen(acDirAndFileName,"w");
fclose(pFile);

acReq[0]='s';acReq[1]='i';acReq[2]='z';acReq[3]='e';acReq[4]='';
//接收文件位元組數
for(;;)
{
//發送請求信息
sendto(iUDP,acReq,strlen(acReq)+1,0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
//每次發送請求信息後等待一段時間
sleepUDP(10);
//接收文件位元組數
acRecvStr[0]='';
iSize=recvfrom(iUDP,acRecvStr,SIZEB,0,(structsockaddr*)&remoteAddr,&iAddrSize);
if(acRecvStr[0]!='')
{
acRecvStr[iSize]='';
iFileSize=strToInt(acRecvStr);
printf("文件位元組數為:%d ",iFileSize);
break;
}
}

//以追加方式寫入文件
pFile=fopen(acDirAndFileName,"ab");
//文件分幾次接收
iRecvNum=iFileSize/SIZEB;
//接收文件
for(i=0;i<iRecvNum;i++)
{
intToStr(i,acReq);
for(;;)
{
//發送請求信息
sendto(iUDP,acReq,strlen(acReq)+1,0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
printf("%s 正在接收文件的第%d段 ",acReq,i);
//每次發送請求信息後等待一段時間
sleepUDP(10);
//接收一段文件
iSize=recvfrom(iUDP,acRecvStr,SIZEB,0,(structsockaddr*)&remoteAddr,&iAddrSize);
if(iSize==SIZEB)
{
//以追加方式寫入文件
fwrite(acRecvStr,sizeof(char),iSize,pFile);
break;
}
}
}
//接收文件剩餘位元組
iSize=iFileSize%SIZEB;
if(iSize>0)
{
acReq[0]='l';acReq[1]='a';acReq[2]='s';acReq[3]='t';acReq[4]='';
for(;;)
{
//發送請求信息
sendto(iUDP,acReq,strlen(acReq)+1,0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
//每次發送請求信息後等待一段時間
sleepUDP(10);
//接收文件剩餘位元組
if(recvfrom(iUDP,acRecvStr,iSize,0,(structsockaddr*)&remoteAddr,&iAddrSize)==iSize)
{
//以追加方式寫入文件
fwrite(acRecvStr,sizeof(char),iSize,pFile);
break;
}
}
}
printf("%s ","文件接收完畢!");

//關閉文件
fclose(pFile);
//關閉連接
closeUDP();
}

//發送文件名
#ifdef_MSC_VER
DWORDWINAPIsendName(LPVOIDp)
#else
void*sendName(void*arg)
#endif
{
intiAddrSize=sizeof(remoteAddr);
acRecvStr[0]='';
//接收請求
printf("%s ","正在接收請求信息!");
recvfrom(iUDP,acRecvStr,5,0,(structsockaddr*)&remoteAddr,&iAddrSize);
//每次接收請求信息後等待一段時間
sleepUDP(10);
//如果請求信息正確發送文件名
if(acRecvStr[0]=='n'&&acRecvStr[1]=='a'&&acRecvStr[2]=='m'&&acRecvStr[3]=='e'&&acRecvStr[4]=='')
sendto(iUDP,acFileName,iNameSize,0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
return0;
}

//發送文件
voidsendFile(char*acDirAndFileName,char*acIpAddr)
{
inti,j,iFileSize,iSendNum,iAddrSize=sizeof(remoteAddr);
FILE*pFile=NULL;

pFile=fopen(acDirAndFileName,"rb");
fseek(pFile,0,SEEK_END);
//文件位元組數
iFileSize=ftell(pFile);
intToStr(iFileSize,acFileSize);
//printf("%s ",acDirAndFileName);

//獲取文件名長度
iSize=strlen(acDirAndFileName);
for(i=iSize-1,iNameSize=0;i>=0;i--,iNameSize++)
if(acDirAndFileName[i]=='\'||acDirAndFileName[i]=='/')
break;
//printf("%d ",iNameSize);

//截取文件名
for(i=0;i<iNameSize;i++)
acFileName[i]=acDirAndFileName[iSize-iNameSize+i];
acFileName[iNameSize]='';
//printf("%s ",acFileName);

openUDP(acIpAddr);
//發送文件名
for(;;)
{
//創建線程
#ifdef_MSC_VER
HANDLEhThread;
DWORDthreadId;
hThread=CreateThread(NULL,0,sendName,0,0,&threadId);
//每次接收請求信息後等待一段時間
sleepUDP(1000);
//強制終止線程
TerminateThread(hThread,0);
#else
pthread_tthread;
void*thread_arg=(pthread_t)0;
pthread_create(&thread,NULL,sendName,(void*)&thread_arg);
//每次接收請求信息後等待一段時間
sleepUDP(1000);
//強制終止線程
pthread_cancel(thread);
#endif
//如果請求信息正確退出循環
if(acRecvStr[0]=='n'&&acRecvStr[1]=='a'&&acRecvStr[2]=='m'&&acRecvStr[3]=='e'&&acRecvStr[4]=='')
break;
}
//發送文件位元組數
for(;;)
{
acRecvStr[0]='';
//接收請求
recvfrom(iUDP,acRecvStr,5,0,(structsockaddr*)&remoteAddr,&iAddrSize);
//每次接收請求信息後等待一段時間
sleepUDP(10);
//如果請求信息正確
if(acRecvStr[0]=='s'&&acRecvStr[1]=='i'&&acRecvStr[2]=='z'&&acRecvStr[3]=='e'&&acRecvStr[4]=='')
{
//發送文件位元組數
sendto(iUDP,acFileSize,strlen(acFileSize),0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
break;
}
}

iSendNum=iFileSize/SIZEB;
//發送文件
if(iSendNum>0)
{
for(i=0;;i++)
{
acRecvStr[0]='';
//接收請求
recvfrom(iUDP,acRecvStr,SIZEB,0,(structsockaddr*)&remoteAddr,&iAddrSize);
printf("%s 正在發送文件的第%d段 ",acRecvStr,i);
//每次接收請求信息後等待一段時間
sleepUDP(10);
fseek(pFile,strToInt(acRecvStr)*SIZEB,SEEK_SET);
fread(acSendStr,1,SIZEB,pFile);
//printf("%s ",acSendStr);
//發送一段文件
sendto(iUDP,acSendStr,SIZEB,0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
if(strToInt(acRecvStr)>=iSendNum-1)
break;
}
}
//發送文件剩餘位元組
iSize=iFileSize%SIZEB;
if(iSize>0)
{
for(;;)
{
acRecvStr[0]='';
//接收請求
recvfrom(iUDP,acRecvStr,5,0,(structsockaddr*)&remoteAddr,&iAddrSize);
//每次接收請求信息後等待一段時間
sleepUDP(10);
//如果請求信息正確
if(acRecvStr[0]=='l'&&acRecvStr[1]=='a'&&acRecvStr[2]=='s'&&acRecvStr[3]=='t'&&acRecvStr[4]=='')
{
fseek(pFile,iSendNum*SIZEB,SEEK_SET);
fread(acSendStr,1,iSize,pFile);
//printf("%s ",acSendStr);
//發送文件剩餘位元組
sendto(iUDP,acSendStr,iSize,0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
break;
}
}
}
printf("%s ","文件發送完畢!");

//關閉連接
closeUDP();
}

intmain(void)
{
characDirName[SIZEA];
characDirAndFileName[SIZEA];
characIpAddr[15];
inti,iOption=0,iSize=0;
FILE*pFile=NULL;
charcLast='\';

option:
printf("%s ","**************************************************** 本程序包括伺服器端和客戶端,既可以發送文件又可以接收文件。 支持無線WiFi,支持USB收發器,但僅支持區域網內傳送文件。 如果要在Windows和Linux之間傳送文件,文件名不能出現中文。 如果要在同一台機器上測試需要同時打開兩個程序。 ****************************************************");
printf("%s ","請輸入選項,1.發送文件、2.接收文件。");
scanf("%d",&iOption);

//發送文件
if(iOption==1)
{
iServerPort=1025;
iClientPort=1024;
fileName:
printf("%s ","請輸入需要發送的路徑文件名。 Windows路徑文件名格式: C:\install.txt Linux路徑文件名格式: /home/install.txt");
scanf("%s",acDirAndFileName);
pFile=fopen(acDirAndFileName,"rb");
if(pFile==NULL)
{
printf("%s ","讀取文件失敗,請重新輸入文件名。");
gotofileName;
}
//關閉文件
fclose(pFile);

printf("%s ","請輸入接收文件方的IP地址,不能有空格。 例如: 192.168.1.104");
scanf("%s",acIpAddr);

sendFile(acDirAndFileName,acIpAddr);
}
//接收文件
elseif(iOption==2)
{
iServerPort=1024;
iClientPort=1025;
dirName:
printf("%s ","請輸入保存文件的路徑名。 Windows路徑名格式: C:\img\ Linux路徑名格式: /home/");
scanf("%s",acDirName);

iSize=strlen(acDirName);
//檢查是不是Linux路徑名
for(i=0;i<iSize;i++)
{
if(acDirName[i]=='/')
{
cLast='/';
break;
}
}
//檢查路徑名最後一個字元是不是或/
if(acDirName[iSize-1]!=cLast)
{
acDirName[iSize]=cLast;
acDirName[iSize+1]='';
}
acDirAndFileName[0]='';
strcat(acDirAndFileName,acDirName);
strcat(acDirAndFileName,"a.txt");
//試探保存一個無關緊要的文件
pFile=fopen(acDirAndFileName,"w");
if(pFile==NULL)
{
printf("%s ","該路徑無法創建文件,請重新輸入路徑名。");
gotodirName;
}
else
{
//關閉文件
fclose(pFile);
//刪除文件
remove(acDirAndFileName);
}

printf("%s ","請輸入發送文件方的IP地址,不能有空格。 例如: 192.168.2.249");
scanf("%s",acIpAddr);

recvFile(acDirName,acIpAddr);
}
else
{
printf("%s ","沒有這個選項,請重新輸入。");
gotooption;
}

return0;
}

4. Linux C語言 C/S程序,客戶端發送的數據和伺服器端接收到的數據不一樣,求解

估計你是用的tcp socket,導致「videlord」網友說的情況:對於tcp socket,send與recv不是對等的,recv時只要緩沖有數據就會收上來。簡單說就是你send 4次,比如分別為10 10 10 10位元組,對端可以一次recv到這40位元組數據,也可以recv 40次、每次1位元組。


解決辦法有兩種:

  1. 改用udp socket,send/recv自然對等了

  2. 繼續用tcp socket,自己進行數據分段:比如自行約定在數據前約定4個位元組用於描述數據長度,這樣發送時,send 4+33位元組,send 4+35位元組;接收時,先獲取描述長度的4位元組獲得長度,再按照長度接收數據(可能需要多次recv湊齊指定長度)。

5. 求助:Linux下C語言如何向串口發送16進制數據

Linux特點是所有都是文件

包括串口設備

首先 找到你串口對應的設備 一般是 /dev/ttyS1

當然 也可能是別的 需要你自己確認硬體。

然後比如你要發送0x01,0x02,0x03,0x04,

intfd;fd=open("/dev/ttyS1",O_RDWD);

charbuf[256]={0x01,0x02,0x03,0x04};
write(fd,buf,4);
close(fd);

這樣就可以了。

6. linux C語言編程,socket實現的即使通訊系統

//服務端server.c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#define SERVPORT 6000 /*伺服器監聽埠號 */
#define BACKLOG 10 /* 最大同時連接請求數 */
#define MAXDATASIZE 100

main()
{
char buf[MAXDATASIZE];
int sockfd,client_fd; /*sock_fd:監聽socket;client_fd:數據傳輸socket */
struct sockaddr_in my_addr; /* 本機地址信息 */
struct sockaddr_in remote_addr; /* 客戶端地址信息 */

if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket創建出錯!");
exit(1);
}
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(SERVPORT);
my_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(my_addr.sin_zero),8);
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)
{
perror("bind出錯!");
exit(1);
}
if (listen(sockfd, BACKLOG) == -1)
{
perror("listen出錯!");
exit(1);
}
while(1)
{
sin_size = sizeof(struct sockaddr_in);
if ((client_fd = accept(sockfd, (struct sockaddr *)&remote_addr, &sin_size)) == -1)
{
perror("accept出錯");
continue;
}
printf("received a connection from %s\n", inet_ntoa(remote_addr.sin_addr));
if (!fork())
{ /* 子進程代碼段 */
if ((recvbytes=recv(client_fd, buf, MAXDATASIZE, 0)) ==-1)
{
perror("recv出錯!");
close(client_fd);
exit(0);
}
buf[recvbytes] = '\0';
printf("from client Received: %s",buf);

if (send(client_fd, "thanks!\n", 8, 0) == -1)
perror("send出錯!");
close(client_fd);
exit(0);
}
close(client_fd);
}
}

//客戶端client.c
#include<stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define SERVPORT 6000
#define MAXDATASIZE 100

main(int argc, char *argv[])
{
int sockfd, recvbytes;
char buf[MAXDATASIZE];
struct hostent *host;
struct sockaddr_in serv_addr;
if (argc < 2)
{
fprintf(stderr,"Please enter the server's hostname!\n");
exit(1);
}
if((host=gethostbyname(argv[1]))==NULL)
{
herror("gethostbyname出錯!");
exit(1);
}
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket創建出錯!");
exit(1);
}
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(SERVPORT);
serv_addr.sin_addr = *((struct in_addr *)host->h_addr);
bzero(&(serv_addr.sin_zero),8);
if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1)
{
perror("connect出錯!");
exit(1);
}

if (send(sockfd, "hello!\n", 7, 0) == -1)
{
perror("send出錯!");
exit(1);
}

if ((recvbytes=recv(sockfd, buf, MAXDATASIZE, 0)) ==-1)
{
perror("recv出錯!");
exit(1);
}
buf[recvbytes] = '\0';
printf("Received: %s",buf);
close(sockfd);
}

7. 設計一個linux c語言,Http協議的伺服器,用socket收發消息,簡單點,求代碼and注釋。

OK
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/ip.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <unistd.h>
#include <string.h>

int main(int argc,char *argv[])
{
int sockfd,new_socket;
int sock_value;
char buf[] = "hello! China!I Love You\n";

struct sockaddr_in client_;
struct sockaddr_in server_;

int SIZE = sizeof(struct sockaddr_in);

if(argc != 2){
fprintf(stderr,"The two number!\n");
exit(1);
}

if((sock_value = atoi(argv[1])) < 0){
fprintf(stderr,"socket error!\n");
exit(1);
}

if((sockfd = socket(PF_INET,SOCK_STREAM, 0)) == -1){
perror("socket");
exit(1);
}

bzero(&server_,SIZE);

server_.sin_family = PF_INET;
server_.sin_port = htons(sock_value);
server_.sin_addr.s_addr = INADDR_ANY;

if(bind(sockfd,(struct sockaddr *)(&server_),SIZE) == -1){
perror("bind");
exit(1);
}

if(listen(sockfd, 12) == -1){
perror("listen");
exit(1);
}

printf("Waiting ... ...\n");

while(1){
if((new_socket = accept(sockfd,(struct sockaddr *)(&client_),&SIZE)) == -1){
perror("accept");
exit(1);
}

printf("The client IP is %s\n",inet_ntoa(client_.sin_addr));
printf("The socket is %d\n",ntohs(client_.sin_port));

if(write(new_socket,buf,strlen(buf)) == -1){
perror("write");
exit(1);
}

int my;
char mybuf[1024];

if((my = read(new_socket, mybuf,1024)) == -1){
perror("read");
exit(1);
}

mybuf[my] = '\0';
printf("#++++#++++#:%s\n",mybuf);

close(new_socket);

}

close(sockfd);

return 0;
}

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/ip.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <unistd.h>

int main(int argc,char *argv[])
{
int sockfd;
int sock_value;
char buf[1024];
char mybuf[] = "Linux\n";
int read_count;

struct sockaddr_in client_;
struct sockaddr_in server_;

int SIZE = sizeof(struct sockaddr_in);

if(argc != 3){
fprintf(stderr,"The two number!\n");
exit(1);
}

if((sock_value = atoi(argv[2])) < 0){
fprintf(stderr,"socket error!\n");
exit(1);
}

if((sockfd = socket(PF_INET,SOCK_STREAM, 0)) == -1){
perror("socket");
exit(1);
}

bzero(&client_,SIZE);
bzero(&server_,SIZE);

client_.sin_family = PF_INET;
client_.sin_port = htons(52252);
client_.sin_addr.s_addr = INADDR_ANY;

server_.sin_family = PF_INET;
server_.sin_port = htons(sock_value);
server_.sin_addr.s_addr = inet_addr(argv[1]);

if(connect(sockfd,(struct sockaddr *)(&server_),SIZE) == -1){
perror("connect");
exit(1);
}

if((read_count = read(sockfd,buf,1024)) == -1){
perror("read");
exit(1);
}

buf[read_count] = '\0';
printf("#----#----#:%s\n",buf);

if(write(sockfd, mybuf,6) == -1){
perror("write");
exit(1);
}

close(sockfd);

exit(0);

return 0;
}

閱讀全文

與linuxc語言發送數據包相關的資料

熱點內容
文件在桌面怎麼刪除干凈 瀏覽:439
馬蘭士67cd機版本 瀏覽:542
javaweb爬蟲程序 瀏覽:537
word中千位分隔符 瀏覽:392
迷你編程七天任務的地圖怎麼過 瀏覽:844
word2003格式不對 瀏覽:86
百度雲怎麼編輯文件在哪裡 瀏覽:304
起名app數據哪裡來的 瀏覽:888
微信怎麼去泡妞 瀏覽:52
百度廣告html代碼 瀏覽:244
qq瀏覽器轉換完成後的文件在哪裡 瀏覽:623
jsp中的session 瀏覽:621
壓縮完了文件去哪裡找 瀏覽:380
武裝突襲3浩方聯機版本 瀏覽:674
網路機頂盒移動網路 瀏覽:391
iphone手機百度雲怎麼保存到qq 瀏覽:148
資料庫設計與實踐讀後感 瀏覽:112
js對象是什麼 瀏覽:744
網頁文件存pdf 瀏覽:567
文件夾正裝 瀏覽:279

友情鏈接