當前位置:首頁 » 編程軟體 » socket高級編程

socket高級編程

發布時間: 2022-05-21 13:50:11

c語言 SOCKET 接受一個串 放數組里

//P2P
#include <afxsock.h>
#include "stdio.h"
void main()
{
//初始化socket庫
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
return;
}
SOCKET sockSrv = socket( AF_INET , SOCK_DGRAM , 0 ) ;
SOCKADDR_IN addrSrv ;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY) ;
addrSrv.sin_family = AF_INET ;
addrSrv.sin_port = htons(4000) ;
bind( sockSrv , (SOCKADDR*)&addrSrv , sizeof(SOCKADDR) ) ;
char recvBuf[100] ;
char tempBuf[200] ;
SOCKADDR_IN addrClient ;
int len = sizeof(SOCKADDR) ;
while (1)
{

recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len) ;
if ( "q " == recvBuf)
{
break ;
}
sprintf(tempBuf,"%s say : %s",inet_ntoa(addrClient.sin_addr),recvBuf) ;//確定對方發東西了。
printf( "%s\n" , tempBuf ) ;
printf( "Please input data:\n" ) ;
}
closesocket( sockSrv ) ;
WSACleanup() ;
}

㈡ 推薦幾本學習linux socket的書

《UNIX網路編程
http://ke..com/view/2697178.htm

《UNIX環境高級編程》
http://ke..com/view/1802295.htm

㈢ 想成為編程高手(包括網路編程),都需要學什麼

都是零基礎入學的,這是網路編程的全部課程,要是感興趣的話可以了解一下:
第一階段
1、計算機操作基礎
2、Office辦公自動化
3、計算機組裝與維護
4、C語言

第二階段
1、SQL Server2005資料庫設計
2、和高級查詢
3、數據結構
4、C#面向對象程序設計
5、HTML5與CSS3開發
6、javaScript
7、jQuery高級編程
8、PHP開發

第三階段
APP Development
1、JavaScript特效製作
2、jQuery應用開發
3、HTML5與CSS3開發
4、Java面向對象程序設計

第四階段
JAVAWEB Development
1、產品流程應用
2、移動平台界面設計
3、Oracle資料庫開發
4、JavaWeb應用開發
Mobile APP Development
1、實訓一:WEB前端設計與開發
2、實訓二:J2EE項目開發

㈣ 請問關於JAVA高級編程的學習順序

socket和他們沒關系,比他們底層一些。
servlet、ejb的容器(如:tomcat)的實現中運用了socket對象。

先學servlet&jsp吧。

介紹兩本不錯的書
Head First Servlet&Jsp
Head First Ejb

㈤ linux c socket 如何實現一個進程多個線程,每個線程管理多個socket連接

大家仔細看,樓主的題目還是很有難度的呢,一個進程多個線程容易實現,但是要讓這些線程中每個線程都管理多個socket連接,確實比較難~~坐等高手。
不過一般都是一個線程處理一個socket連接,這種例子是:
(取自書上,僅供學習,直接編譯肯定通不過,少書上其他代碼)
==================================================
/* include serv06 */#include "unpthread.h"
intmain(int argc, char **argv)
{
int listenfd, connfd;
void sig_int(int);
void *doit(void *);
pthread_t tid;
socklen_t clilen, addrlen;
struct sockaddr *cliaddr;

if (argc == 2) listenfd = Tcp_listen(NULL, argv[1], &addrlen);
else if (argc == 3)
listenfd = Tcp_listen(argv[1], argv[2], &addrlen);
else
err_quit("usage: serv06 [ <host> ] <port#>");
cliaddr = Malloc(addrlen);

Signal(SIGINT, sig_int);
for ( ; ; ) { clilen = addrlen;
connfd = Accept(listenfd, cliaddr, &clilen);

Pthread_create(&tid, NULL, &doit, (void *) connfd); }
}

void *doit(void *arg)
{
void web_child(int);

Pthread_detach(pthread_self()); web_child((int) arg);
Close((int) arg);
return(NULL);
}
/* end serv06 */

voidsig_int(int signo)
{
void pr_cpu_time(void);

pr_cpu_time(); exit(0);
}
================================================================

㈥ 如何學習網路編程

1.利用WinInet函數庫寫了幾個簡單的網路應用程序:簡易登錄、查詢新書RSS等;了解了HTTP協議的一些內容。
2.看孫鑫的VC視頻教程, ,雖然照著視頻能夠寫出實例代碼來,但是僅僅是會用,其中很多原理都不理解,比如說WSA開頭的非同步函數,Winsock2對socket的一些增強或者改進等。
3.一邊上《計算機網路》的課,一邊讀《C++網路編程》。通過計算機網路課我知道了所謂的協議分析是怎麼一回事情,通過wireshark抓包分析,「協議」就如同這個詞本身意思是一樣的,是通信過程中的一種約定,規定了數據包中的每個或每幾個位元組代表了什麼意思;
4.去看《計算機網路高級編程技術》,我初略的翻了翻,看到裡面的基礎、提高、綜合訓練篇、突然反應過來:socket和操作系統提供的系統調用,基本上都是C語言介面的,協議欄位的具體表現,不就是用結構體嗎?協議中的幾個位元組代表什麼與C語言基本數據類型就能對應了起來(-_-!這是缺少實踐造成的遲鈍啊)。
5.了解下Boost.asio,Java的MINA框架,這些都是非同步I/O前攝器模式的實現,當然還有ACE_Proactor
6.閱讀《深入理解MySQL核心技術》和Linux程序設計(第3版)》,從把整個知識體系都聯系起來,從socket到完整網路伺服器程序,網路編程才算正式進入了門道。

所以,正常的學習路徑應該是:C/C++語言 -->>計算機網路 -->>協議分析 -->>BSD Socket、OS API ( fork()、pthread_create()、select() ) -->>Reactor、Proactor模式

在這個過程我的體會是,最好是從Linux下或者Unix底下學習,比起Windows,Linux的編程介面設計更很簡潔,使用的基本上都是標準的數據類型,很多源代碼是開放的,而且我比較習慣於看小寫的英文單詞。。。我發現,如果最一開始能夠從整體上了解網路編程的全景,就會知道應該學習什麼,下一步該學什麼,循序漸進才是好的學習方法。

我所理解的「全景」:

--計算機網路種類有很多種:ATM、X.25、Internet(大大小小的區域網互聯而成,乙太網、令牌網等等)

---- Internet通信的協議也有很多種,其中最核心的是TCP/IP協議

---- 網路編程介面也有很多種,BSD UNIX提出了socket,是一種通信機制,是管道概念的擴展

-------- socket有三種屬性:域(或協議族)、類型、協議

-------- 最常用的協議族有AF_UNIX和AF_INET(對應現在的Internet),AF_INET的類型又有兩種:數據流(tcp)和數據報 (udp)

------------ 在<sys/types.h>和<sys/socket.h>定義了socket編程的系統調用:socket()、struct sockaddr、bind()、listen()、accept()、connect()、close()、sendto()、recvfrom()

------------ 其中bind()是用來給創建的socket命名的,如果是AF_UNIX會關聯到文件系統的一個路徑上,如果是AF_INET則會綁定到IP的埠號上;listen()用來保存未處理的客戶請求的隊列;accept()等待客戶端的連接,會創建新的socket用來處理客戶端連接。

------------ 由於歷史原因,不同的計算機使用不同的位元組序來表示整數,Intel和Motorola的處理器的位元組序就不一樣,所以要轉換為網路序(好像Unicode中的Little-Endian、Big-Endian也是這么個情況。。)

------------ 伺服器必然為多客戶服務的,為了提高運行效率,高效利用系統資源,就出現多進程、多線程的服務端程序,這就需要用到fork()和pthread_create()了,再往下就是select()、pull()等多路復用和非同步I/O機制了。

----------------為了簡化網路應用程序的開發,增加代碼的復用性、擴展性、可謂性;出現了Reacotr、Preactor等設計模式,出現了ACE、Boost.asio等框架、進一步簡化網路開發的難度,出現了WinInet、libcurl這樣的面向應用層的函數庫。

㈦ 有關於C#語言的Socket編程書籍嗎

《.net網路高級編程》
《Visua C#網路編程技術與實踐(附1張CD光碟)》(網路編程系列叢書)

㈧ 網路編程用什麼語言

網路編程這個概念太大了,包括很多東西,需要各種語言。大概給你說一說吧。
傳輸層以下的編程技術,一般來說是用匯編、C語言這一類與底層結合很緊密的編程語言。比如,基本的路由器編程、網路層數據交換技術編程等等。
傳輸層以上的編程技術,基本是在應用級別,幾乎可以使用現代所有高級編程語言和高級編程腳本中涉及網路通信的部分來實現。從機制上來說,可以分為socket編程、XML-RPC編程、REST編程等;從架構上來說,可以分為BS(Browser/Server)編程、CS(Client/Server)編程等等...
各種編程語言對這些分類幾乎都是支持的。但是不同的編程語言在不同的方面有自己的優勢,比如C語言在Socket編程上有最直接的實現;Java和.NET等對XML-RPC編程封裝的很好;PHP、Python、Perl等高級腳本語言在實現REST編程上較為簡便;HTML/CSS/Javascript的組合是Browser端編程最常用的方式;等等等等...

㈨ 為什麼還要用c語言編寫socket呢現在java這么方便,想知道c來編socket有什麼好處,尤其在linux下,謝謝!

socket(也叫套接字)最初是在Unix系統上開發的網路通信的介面。
後來微軟等公司將它移植到了windows下,當然原來unix系統下的還是好用的。
對於socket可以這樣理解:
它就是一個函數庫,裡麵包括大量的函數和相應的數據結構,已經實現好了。
它支持網路通信。
程序開發人員可以通過閱讀相關的函數文檔,了解函數的使用方法,進行網路的編程。
兩種形式的socket:流式套接字,對應與TCP協議。
數據報套接字,對應與UDP協議。

有本《Linux環境高級編程》你可以看看

Java 和其它語言之間進行Socket通信使用Socket和ServerSocket類。
用JAVA編寫server,C語言編寫Client,當然可以實現通信(示例在最後)。

1、Socket和ServerSocket類庫位於java.net包中。ServerSocket用於伺服器端,Socket 是建立網路連接時使用的。在連接成功時,應用程序兩端都會產生一個Socket實例,操作這個實例,完成所需的會話。對於一個網路連接來說,套接字是平等的,並沒有差別,不因為在伺服器端或在客戶端而產生不同級別。不管是Socket還是ServerSocket它們的工作都是通過SocketImpl類及其子類完成的。
重要的Socket API:
java.net.Socket繼承於java.lang.Object,有八個構造器,其方法並不多,使用頻繁的三個方法:
. Accept方法用於產生"阻塞",直到接受到一個連接,並且返回一個客戶端的Socket對象實例。"阻塞"是一個術語,它使程序運行暫時"停留"在這個地方,直到一個會話產生,然後程序繼續;通常"阻塞"是由循環產生的。
. getInputStream方法獲得網路連接輸入,同時返回一個IutputStream對象實例,。
. getOutputStream方法連接的另一端將得到輸入,同時返回一個OutputStream對象實例。
注意:其中getInputStream和getOutputStream方法均會產生一個IOException,它必須被捕獲,因為它們返回的流對象,通常都會被另一個流對象使用。
2.如何開發一個Server-Client模型的程序
開發原理:
伺服器,使用ServerSocket監聽指定的埠,埠可以隨意指定(由於1024以下的埠通常屬於保留埠,在一些操作系統中不可以隨意使用,所以建議使用大於1024的埠),等待客戶連接請求,客戶連接後,會話產生;在完成會話後,關閉連接。
客戶端,使用Socket對網路上某一個伺服器的某一個埠發出連接請求,一旦連接成功,打開會話;會話完成後,關閉Socket。客戶端不需要指定打開的埠,通常臨時的、動態的分配一個1024以上的埠。

下面這個程序用JAVA建立了一個伺服器,它一直監聽10000埠,等待用戶連接,而用戶端則可以使用C寫的程序來連接該伺服器。
本程序在建立連接後給客戶端返回一段信息,然後結束會話。這個程序一次只能接受一個客戶連接。

import java.net.*;
import java.io.*;

public class Server
{
private ServerSocket ss;
private Socket socket;
private BufferedReader in;
private PrintWriter out;

public Server()
{
try
{
ss = new ServerSocket(10000);
while (true)
{
socket = ss.accept();
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(),true);

String line = in.readLine();
out.println("you input is :" + line);
out.close();
in.close();
socket.close();
}
ss.close();
}
catch (IOException e)
{}
}

public static void main(String[] args)
{
new Server();
}
}

㈩ 求C# Socket 聊天編程 實例教學的書籍 (內容詳細的那種)

你是打算通過一本書就做出一個功能相對齊全的聊天程序,這就好比是拜了個師就想變成武林高手一樣。世界上哪裡有這種美事。師父只能是領你進門,修行還是要靠個人的。不管你用了哪本書,用了哪個實例,其結果都是一樣的,他們只能是教你一些socket編程的入門知識和技能。為什麼會這樣子呢?因為一個socket程序簡單起來可以很簡單,復雜起來的話那是你無法想像的,而且主要的是想做出好的、功能全的程序,它涉及了不少c#的高級編程技術。這些高級技術對於程序員來說,沒有一定功力的話是斷然不會的。所以沒有哪個教材會去教功能復雜聊天程序,它們能做的是教你一些基礎的入門知識。當然了,也不用灰心,基礎的東西做出來後,其它的功能你就可以附加上去了,畢竟修行是靠個人的嘛。
個人使用的是 C#網路應用編程(第2版) 對於學習來說,還是很不錯的

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:705
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:968
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:676
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:828
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:737
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1076
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:308
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:188
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:875
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:829