當前位置:首頁 » 操作系統 » linuxsocket源碼

linuxsocket源碼

發布時間: 2022-08-28 03:22:37

㈠ socket,linuxc語言實現

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

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

㈡ linux socket編程代碼解析

很簡單的一個socket server端和client端通信程序啊!
server端監聽埠,client主動連接server端,連接上後client端先將student這樣一個結構體數據發送給server端,server端線接受這個結構體數據,然後再向client端發送這個student結構體數據,client端接收。
ok,通信過程完成。

㈢ linux編程socket程序的編譯語句

server端:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include<string.h>
#include <ctype.h>
#include <sys/socket.h>
#include <arpa/inet.h>

#define MAX_LINE 100

int main()
{
struct sockaddr_in server;
struct sockaddr_in client;

int server_fd;
int client_fd;

socklen_t len;

char buf[MAX_LINE]; //用於存儲傳送內容到緩沖區
char addr_ip[INET_ADDRSTRLEN];//存儲客戶端地址緩沖區
int port = 8000;//埠號8000
int n; //讀寫位元組數

bzero(&server,sizeof(server));//清空地址結構
server.sin_family = AF_INET;//使用ipv4
server.sin_addr.s_addr = INADDR_ANY;//伺服器可以接受任意地址
server.sin_port = htons(port);//把埠號轉成網路位元組序

server_fd = socket(AF_INET,SOCK_STREAM,0);//創立套接字,使用tcp協議
bind(server_fd,(struct sockaddr *)&server,sizeof(server));//將地址和套接字綁定
listen(server_fd,10);//開始監聽

printf("waiting```\n");

while(1)
{
client_fd = accept(server_fd,(struct sockaddr *)&client,&len);
n = read(client_fd,buf,MAX_LINE);//讀取客戶端來的消息
inet_ntop(AF_INET,&client.sin_addr,addr_ip,sizeof(addr_ip));

printf("client ip is : %s , port is : %d\n",addr_ip,ntohs(client.sin_port));
printf("content is : %s\n",buf);//列印客戶端信息

write(client_fd,buf,n);//轉發回去給客戶端
close(client_fd);
}

if(close(client_fd) == -1)
{
perror("fail to close");
exit(1);
}

return 0;
}

client端:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

#define MAX_LINE 100

int main(int argc,char * argv[])
{
struct sockaddr_in server;//伺服器地址
char buf[MAX_LINE];

int server_fd;
int port = 8000;

char *str = "test string";//默認字元串

if(argc > 1)
{
str = argv[1];//從命令參數中取得用戶輸入的串
}

bzero(&server,sizeof(server));//清空地址結構

server.sin_family = AF_INET;//使用ipv4

inet_pton(AF_INET,"192.168.228.129",&server.sin_addr);
server.sin_port = htons(port);

server_fd = socket(AF_INET,SOCK_STREAM,0);//創建套接字

connect(server_fd,(struct sockaddr *)&server,sizeof(server));

write(server_fd,str,strlen(str) + 1);
//因為是本機測試,所以不用考慮延時
read(server_fd,buf,MAX_LINE);

printf("recieve from server :%s\n",buf);
close(server_fd);

return 0;
}

//源碼來自於網路,誰寫也都類似,都是基於tcp的三次握手協議來寫的

㈣ linux socket網路編程學完看哪些源碼

要看的東西實在是太多了,不如來培訓一下吧。

㈤ 求 Linux下socket編程,用於傳遞文件,並且用CRC校驗的源代碼!

把CRC寫入文件,然後再傳輸文件。
接收的部分,先收完文件,再從文件中讀出CRC進行判斷。不成功則報錯,丟棄文件。

㈥ Linux中C語言的一個函數的源代碼:socket 編程中的 recv() 函數。

1、recv是socket編程中最常用的函數之一,在阻塞狀態的recv有時候會返回不同的值,而對於錯誤值也有相應的錯誤碼,分別對應不同的狀態。
2、recv函數只是在用戶空間定義的。內核空間有與之對應的函數,也就是說,執行recv函數就會調用到內核中與它對應的函數,實際起作用的就是內核里的這個函數。至於內核里調用的是那個函數,內核里的調用關系復雜的很,除非對內核非常了解的,才會找到到底是怎麼調用的,他也是只是找到怎麼調用的。

㈦ linux下socket編程,只需要實現伺服器端能接收多個用戶端發來的消息這個功能就行,求代碼,最好有相應解釋

這些都是自己寫的,由於我很粗心調試了好久,要是有任何問題我都可以幫你解決,包教會,而且可以進一步一起完善他的功能

#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#include<sys/time.h>

#define BUFF_SIZE 1024
#define PORT 8888
#define LSN_NUM 10

int main()
{
int sockfd = -1;
int clt_sockfd = -1;
int i = 0, fd;
fd_set inset, tmp_inset;
struct sockaddr_in *server_addr, *client_addr;
int addr_len = sizeof(struct sockaddr_in);
int len;
char buff[BUFF_SIZE];

if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 1){
printf("Create socket error!\n");
exit(0);
}else{
printf("Create socket success! sockfd = %d\n", sockfd);
}

server_addr = malloc(addr_len);
client_addr = malloc(addr_len);
memset(server_addr, 0, sizeof(server_addr));
memset(client_addr, 0, sizeof(client_addr));
server_addr->sin_family = AF_INET;
server_addr->sin_port = htons(PORT); //此處要將主機位元組序轉為網路位元組序
server_addr->sin_addr.s_addr = INADDR_ANY;
if(bind(sockfd, (struct sockaddr*)server_addr, sizeof(struct sockaddr_in)) < 0){
printf("Bind error!\n");
exit(0);
}else{
printf("Bind success!\n");
}

if(listen(sockfd, LSN_NUM) < 0){
printf("Listen error!\n");
exit(0);
}else{
printf("Listen success!\n");
}

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

i = 1;
FD_ZERO(&inset);
FD_SET(sockfd, &inset);
while(1){
printf("------ The %dth turning ------- \n", i++);
tmp_inset = inset;
memset(buff, 0, BUFF_SIZE);
//select
if(select(FD_SETSIZE, &tmp_inset, NULL, NULL, NULL) <= 0){
printf("Select failed!\n");
exit(0);
}else{
printf("Select success!\n");
}//end select
for(fd = 0; fd < FD_SETSIZE; fd++){
if(FD_ISSET(fd, &tmp_inset) > 0){
printf("crrent fd: %d\n", fd);
if(sockfd == fd){
if((clt_sockfd = accept(sockfd, (struct sockaddr*)client_addr, &addr_len)) < 0){
printf("Accept error!\n");
exit(0);
}else{
printf("Get connection from %s, port: %d. socket: %d\n", \
inet_ntoa(client_addr->sin_addr), ntohs(client_addr->sin_port), clt_sockfd);
}
FD_SET(clt_sockfd, &inset);
}else{
if((len = recv(fd, buff, BUFF_SIZE, 0)) < 0){
printf("Recv failed!\b");
close(fd);
FD_CLR(fd, &inset);
}else if(0 == len || !strncmp("quit", buff, 4)){
printf("Clt_sockfd %d has quited!\n", clt_sockfd);
close(fd);
FD_CLR(fd, &inset);
continue;
}else{
printf("Clt_sockfd %d got message: %s\n", clt_sockfd, buff);
}
}
}
}
continue;
}
}
free(server_addr);
free(client_addr);

}

熱點內容
c語言自考 發布:2025-05-15 07:52:42 瀏覽:500
壓縮的玉 發布:2025-05-15 07:51:22 瀏覽:789
android的控制項 發布:2025-05-15 07:50:36 瀏覽:552
南崗法院伺服器ip地址 發布:2025-05-15 07:46:02 瀏覽:287
實況如何退出賬號安卓 發布:2025-05-15 07:45:56 瀏覽:918
深入編譯器 發布:2025-05-15 07:41:35 瀏覽:878
電信手機號服務密碼怎麼查 發布:2025-05-15 07:40:10 瀏覽:613
python全局變數文件 發布:2025-05-15 07:35:06 瀏覽:954
位元組和存儲位元組 發布:2025-05-15 07:32:10 瀏覽:521
linux應用開發工程師 發布:2025-05-15 07:32:07 瀏覽:261