當前位置:首頁 » 編程軟體 » clinuxsocket編程

clinuxsocket編程

發布時間: 2022-03-14 17:59:10

⑴ 關於linux C SOCKET 編程請教

你想重寫哪一層.
如果你想寫前五層就要看一下TCP/IP.
我估計你最多也就做一下重新定義FILE D 結構
網路這方面要做的東西很多。
其中網路傳輸只是一小部分,還有讀寫和進程信號相關的,你要重新實現阻塞/非阻塞,實現BUFFER有數據信號通知進程.
系統內核做的工作就是處理阻塞、非阻塞和低速網路的停等以及,還有識別對方出錯或網路異常中斷.緩沖區數據最大的停留時間......
工作量大的很呢。這項工作 你估計要做N年了

⑵ Linux(或c語言)和java下的socket編程有什麼異同點

不同:
1.首先2者提供的介面不同,這點很容易區分。

2.java跨平台,寫好的程序不用做任何修改就可以放到linux或者windows或者蘋果等諸多操作系統上運行,C當然可以,但linux本身提供了socket的系統調用,你如果使用的是linux系統調用,那麼你的程序只能在linux下運行,這點不難理解。但如果是C的庫函數,那還是可以跨平台的

3.利用linux系統調用的速度是要快於JAVA提供的SOCKET介面。

相同性我就不說了,你看完我下面的話,你就能理解他們直接的關系了。

從你提出的問題,我覺的你可能對編程不是很了解。

socket是用來實現進程通信(主要是網路通信)的目的,但這不是語言能夠解決的問題,確切的說語言連什麼是進程他都不知道。這么說來SOCKET不是JAVA帶的功能,那麼JAVA是如何來實現這一功能的呢?JAVA是通過調用系統提供的SOCKET來完成的。

在LINUX裡面,JAVA中的SCOKET最終就是通過調用系統提供的系統調用來完成,而系統調用的SOCKET則是操作系統和硬體共同完成的。所以他們共同點是,如果你的JAVA程序是在LINUX中運行的,那他們通信的具體過程會完全一樣,只不過JAVA會在系統調用前面加上一些它認為必需加的東西或者是它認為能夠方便編程人員使用的東西。

⑶ 菜鳥請教linux C 語言socket 編程的問題, 我想讓服務端程序接收數據包 進行處理

舉例來說吧
// 寫一個伺服器類
ServerSocket serverSocket = new ServerSocket(8888);
//等待客戶來接
Socket socket = serverSocket.accept();

//再定義輸入輸出對象
DataInputStream inputFromClient = new DataInputStream(
socket.getInputStream());
DataOutputStream outputToClient = new DataOutputStream(
socket.getOutputStream());
//下面就用輸入對象讀取數據,然後用輸出對象輸出就行了

⑷ linux下C語言socket編程雙機互發數據

這個問題很好辦啦,伺服器接受一個連接請求,然後開一個線程或者進程都可以,再在線程或者進程裡面採用其他技術實現同時收發(比如I/O復用,比如非阻塞I/O)。客戶端也可以採用I/O復用。

推薦資料的話,《unix網路編程》這本書很好,公認的經典,當教科書用,這本書里有你想要的所有內容。

ps:你基礎太差,多補補吧,別想一下吃個胖子。

另外我這里正好有個例子滿足你的要求,貼給你,自己寫的,不是網上找的,用的是多進程加I/O復用技術:

server端:
/****************************************************************
**
**
**
****************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <errno.h>
#include <string.h>
#include <signal.h>
#include <sys/wait.h>
#include <sys/select.h>
#include <sys/time.h>
#include <unistd.h>

#define BUFLEN 1024
#define MAX(a,b) ((a)>(b)?(a):(b))

typedef void Sigfunc (int);

void str_echo(FILE *,int);
//Sigfunc *signal(int, Sigfunc *);

int main(int argc,char **argv)
{
int connfd,listenfd;
pid_t childpid;
socklen_t clilen;
struct sockaddr_in cliaddr,servaddr;
void sig_chld(int);

listenfd = socket(AF_INET, SOCK_STREAM, 0);

memset(&servaddr,0,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(5358);

bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));
listen(listenfd,8);

signal(SIGCHLD,sig_chld);

while(1)
{
clilen = sizeof(cliaddr);
if((connfd = accept(listenfd,(struct sockaddr*)&cliaddr,&clilen)) < 0)
{
if(errno == EINTR)
{
fputs("accept error: EINTR\n",stdout);
continue;
}
else
{
fputs("accept error..\n",stdout);
}
}

if((childpid = fork()) == 0)
{
close(listenfd);
str_echo(stdin,connfd);
exit(0);
}
close(connfd);
}
}

void str_echo(FILE *fp,int sockfd)
{
int n = 0;
char sendbuf[BUFLEN] = { 0 },recvbuf[BUFLEN] = { 0 };
int maxfdp;
fd_set rset;

FD_ZERO(&rset);

while(1)
{
FD_SET(fileno(fp),&rset);
FD_SET(sockfd, &rset);
maxfdp = MAX(fileno(fp),sockfd)+1;

select(maxfdp, &rset ,NULL, NULL, NULL);

if(FD_ISSET(sockfd, &rset))
{
if(n = read(sockfd, recvbuf, BUFLEN) == 0)
{
return;
}
if(n == -1)
{
break;
}
printf("%s\n",recvbuf);
memset(recvbuf,0,BUFLEN);
}
if(FD_ISSET(fileno(fp),&rset))
{
scanf("%s",sendbuf);
write(sockfd, sendbuf,strlen(sendbuf));
}
}
}

void sig_chld (int signo)
{
pid_t pid;
int stat;

while ((pid = waitpid(-1,&stat, WNOHANG)) > 0)
{
printf("child %d terminated\n",pid);
}
return;
}

client端:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/select.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>

#define MAX(a,b) (a)>(b)?(a):(b)

int main()
{
int s,connectReturn, maxfd;
fd_set rset;
char sendbuf[1024] = {0};
char recvbuf[1024] = {0};
long port=5358;
s=socket(PF_INET,SOCK_STREAM,0);

struct sockaddr_in sa;
sa.sin_family=AF_INET;
sa.sin_addr.s_addr=inet_addr("127.0.0.1");
sa.sin_port=htons(port);
connectReturn=connect(s,(struct sockaddr *)&sa,sizeof(sa));
printf("%d\n",connectReturn);
FD_ZERO(&rset);
while(1)
{
FD_SET(fileno(stdin), &rset);
FD_SET(s, &rset);
maxfd=MAX(fileno(stdin), s) + 1;

select(maxfd, &rset, NULL, NULL, NULL);
if(FD_ISSET(fileno(stdin), &rset))
{
scanf("%s",sendbuf);
send(s,sendbuf,strlen(sendbuf),0);
bzero(sendbuf, 1024);
}
else if(FD_ISSET(s, &rset))
{
memset(recvbuf,0,1024);
recv(s,recvbuf,1024,0);
printf("remote: %s\n",recvbuf);
}
}
return 0;
}

⑸ Linux下C語言socket編程

我也想知道啊

⑹ socket,linux用c語言實現

不難吧,我給你說下流程
客戶端
1、創建socket套接子s
2、用s連接到服務端,connect這個函數,成功返回0,錯誤 -1;
3、可以發送和接收數據,看你是面向連接還是無連接的了,具體的你自己處理
服務端
1、創建socket,比如s
2、綁定埠和本級IP。bind
3、listen。監聽埠
4、accept,接受服務端連接,如果成功的話會返回一個新套接字的,比如s1,你可以利用s1和客戶端進行通信,接收和發送和客戶端的一樣

還有需要提醒的是,你使用面向無連接的時候客戶端和服務端差不多是一樣的工作流程,都和上邊服務端工作模式一樣

⑺ linux下C語言用socket網路編程怎麼計算傳輸速度

這要你的通信程序協商一個協議,比如定義一個通信結構體,傳文件的時候,一開始發送結構體的信息過去,告訴對端你的文件總大小,然後,傳輸過程中,統計已經收到或者發送的數據,做個除法就得到速率了。

具體這類協商,你可以自己隨便想,也可以借鑒現有的比較好的一些設計,有些考慮斷點續傳的技術,還有壓縮的,看你代碼也不需要考慮吧。

⑻ 求教關於linux socket C編程。

可以用多個進程或者線程.

主進程可以一直監聽,然後如果監聽到了,就新建一個進程/線程去和這個socket通信,然後主進程繼續監聽就可以了.

⑼ Linux下C語言Socket編程問題(高手進)

(1) serv1, serv2在同一物理機器上嗎?SCK1,SCK2埠是一樣的嗎?
(2)1分鍾後再次創建SCK1會成功,但不會與對方SERV1連接成功,因為對方沒有監聽埠或者原來的埠資源沒有被釋放。
請詳細補充描述之

熱點內容
大學資料庫學 發布:2025-01-23 02:54:30 瀏覽:588
部隊營區監控系統錄像存儲多少天 發布:2025-01-23 02:49:26 瀏覽:523
oraclelinux用戶名和密碼 發布:2025-01-23 02:43:06 瀏覽:404
安卓手機主頁滑動屏幕怎麼設置 發布:2025-01-23 02:41:15 瀏覽:225
小臉解壓 發布:2025-01-23 02:24:17 瀏覽:368
網易電腦版我的世界布吉島伺服器 發布:2025-01-23 02:20:17 瀏覽:985
xlc編譯選項 發布:2025-01-23 02:11:25 瀏覽:721
電腦訪問存儲伺服器硬碟 發布:2025-01-23 02:08:29 瀏覽:569
lol破解腳本 發布:2025-01-23 02:07:54 瀏覽:130
演算法是步驟 發布:2025-01-23 01:47:22 瀏覽:238