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

tcpipsockets編程

發布時間: 2022-07-30 01:12:21

㈠ socket編程和tcp/ip有什麼區別

tcp/ip是通訊協議,三次握手,
socket就是套接字,你可以理解為socket可以使用TCP、IP協議來進行傳輸數據。

㈡ mfc中用TCP/IP socket編程來寫了一個簡單的收發端,可客戶端的accept()老連接不上

你的意思是不是服務端卡在accept()那,然後客戶端彈出「連接失敗!」窗口?
如果是這樣的話先檢查網路連接是否正常,然後IP是不是對的
如果以上都沒問題,用WSAGetLastError()得到錯誤代碼並在MessageBox()中顯示。
另外發現你用阻塞方式收發數據,最好將這兩段代碼放入新線程,否則容易卡死

附上WSAGetLastError()錯誤代碼:
WSAENOTINITIALISED:在使用此API之前應首先成功地調用WSAStartup()。
WSAENETDOWN:WINDOWS套介面實現檢測到網路子系統失效。
WSAEADDRINUSE:所指的地址已在使用中。
WSAEINTR:通過一個WSACancelBlockingCall()來取消一個(阻塞的)調用。
WSAEINPROGRESS:一個阻塞的WINDOWS套介面調用正在運行中。
WSAEADDRNOTAVAIL:在本地機器上找不到所指的地址。
WSAENOTSUPPORT:所指族中地址無法與本套介面一起使用。
WSAECONNREFUSED:連接嘗試被強制拒絕。
WSAEDESTADDREQ:需要目的地址。
WSAEFAULT:namelen參數不正確。
WSAEINVAL:套介面沒有準備好與一地址捆綁。
WSAEISCONN:套介面早已連接。
WSAEMFILE:無多餘文件描述字。
WSAENETUNREACH:當前無法從本主機訪問網路。
WSAENOBUFS:無可用緩沖區。套介面未被連接。
WSAENOTSOCK:描述字不是一個套介面。
WSAETIMEOUT:超時時間到。
WSAEWOULDBLOCK:套介面設置為非阻塞方式且連接不能立即建立。可用select()調用對套介面寫,因為select()時會進行連接。

希望對你有幫肋..

㈢ 採用tcp協議,使用socket編程,編寫程序完成客戶端發送消息給服務端,服務端接到消息後,再發

服務端代碼:
/*server.c*/

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <netinet/in.h>

#define PORT 4321
#define BUFFER_SIZE 1024
#define MAX_QUE_CONN_NM 5

int main()
{
struct sockaddr_in server_sockaddr, client_sockaddr;
int sin_size, recvbytes;
int sockfd, client_fd;
char buf[BUFFER_SIZE];

/*建立socket連接*/
if ((sockfd = socket(AF_INET,SOCK_STREAM,0))== -1)
{
perror("socket");
exit(1);
}
printf("Socket id = %d\n",sockfd);

/*設置sockaddr_in 結構體中相關參數*/
server_sockaddr.sin_family = AF_INET;
server_sockaddr.sin_port = htons(PORT);
server_sockaddr.sin_addr.s_addr = INADDR_ANY;
bzero(&(server_sockaddr.sin_zero), 8);

int i = 1;/* 使得重復使用本地地址與套接字進行綁定 */
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i));

/*綁定函數bind*/
if (bind(sockfd, (struct sockaddr *)&server_sockaddr, sizeof(struct sockaddr))== -1)
{
perror("bind");
exit(1);
}
printf("Bind success!\n");

/*調用listen函數*/
if (listen(sockfd, MAX_QUE_CONN_NM) == -1)
{
perror("listen");
exit(1);
}
printf("Listening....\n");

/*調用accept函數,等待客戶端的連接*/
if ((client_fd = accept(sockfd, (struct sockaddr *)&client_sockaddr, &sin_size)) == -1)
{
perror("accept");
exit(1);
}

/*調用recv函數接收客戶端的請求*/
memset(buf , 0, sizeof(buf));
if ((recvbytes = recv(client_fd, buf, BUFFER_SIZE, 0)) == -1)
{
perror("recv");
exit(1);
}
printf("Received a message: %s\n", buf);

if ((sendbytes = send(sockfd, buf, strlen(buf), 0)) == -1)
{
perror("send");
exit(1);
}
close(sockfd);
exit(0);
}

客戶端:
/*client.c*/

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <netdb.h>
#include <netinet/in.h>

#define PORT 4321
#define BUFFER_SIZE 1024

int main(int argc, char *argv[])
{
int sockfd, sendbytes;
char buf[BUFFER_SIZE];
struct hostent *host;
struct sockaddr_in serv_addr;

if(argc < 3)
{
fprintf(stderr,"USAGE: ./client Hostname(or ip address) Text\n");
exit(1);
}

/*地址解析函數*/
if ((host = gethostbyname(argv[1])) == NULL)
{
perror("gethostbyname");
exit(1);
}

memset(buf, 0, sizeof(buf));
sprintf(buf, "%s", argv[2]);

/*創建socket*/
if ((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
{
perror("socket");
exit(1);
}

/*設置sockaddr_in 結構體中相關參數*/
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);
serv_addr.sin_addr = *((struct in_addr *)host->h_addr);
bzero(&(serv_addr.sin_zero), 8);

/*調用connect函數主動發起對伺服器端的連接*/
if(connect(sockfd,(struct sockaddr *)&serv_addr, sizeof(struct sockaddr))== -1)
{
perror("connect");
exit(1);
}

/*發送消息給伺服器端*/
if ((sendbytes = send(sockfd, buf, strlen(buf), 0)) == -1)
{
perror("send");
exit(1);
}

if ((recvbytes = recv(sockfd, buf, BUFFER_SIZE, 0)) == -1)
{
perror("recv");
exit(1);
}

close(sockfd);
exit(0);
}

㈣ 實驗 面向TCP Socket編程 2 .實驗任務 使用Java編寫網路選課模擬程序,它由 client 和 server 兩部分組成

這位兄台,你還真是摳門,這么復雜的東西才給5分啊,汗

㈤ TCP/IP Sockets編程(C語言實現)

你求書可能費點勁哈,本人樂意以你分享一些經驗,共同進步
QQ178664147
請附加合適的說明.

㈥ 求助Socket與Tcp/Ip編程的關系與區別

Socket介面是TCP/IP網路的API,Socket介面定義了許多函數或常式,程序員可以用它們來開發TCP/IP網路上的應用程序。要學Internet上的TCP/IP網路編程,必須理解Socket介面。
Socket也是一種文件描述符,通過寫入IP地址和埠號就可以進行TCP/UDP連接
學習socket還是很簡單的,你可以看看Windows網路編程

㈦ 如何基於TCP/IP協議進行MFC Socket網路通訊編程

可以使用MFC的CAsyncSocket和CSocket類,也可以直接使用Win32 API中的socket系列函數。

㈧ TCP/IP SOCKETS編程(C語言實現)(第2版)

書沒看過,以前編C的經驗,linux和windows下的C編程差別不會特別大,關鍵是C的版本,比如TC、WinC那些東東,如果不認識的函數,可以去搜搜網路,同樣的函數一般是沒有差別的,如果有些你懷疑是linux/unix下的命令,你敲個man
[命令]
就能查看那個命令的用法了,如果是Windows的,在cmd下面[命令]
--help
或者[命令]
/?
都能看命令用法
O(∩_∩)O

㈨ 簡述基於TCP和UDP的Socket編程的異同

Socket有兩種主要的操作方式:面向連接的和無連接的。無連接的操作使用UDP數據報協議,這個操作不需要連接一個目的的socket,它只是簡單地投出數據報,快速高效,但缺少數據安全性。面向連接的操作使用TCP協議,一個這個模式的socket必須在發送數據之前與目的地的socket取得一個連接,一旦連接建立了,socket就可以使用一個流介面:打開-讀-寫-關閉,所有的發送的信息都會在另一端以同樣的順序被接收,面向連接的操作比無連接的操作效率要低,但數據的安全性更高。基於TCP的socket編程是採用的流式套接字(SOCK_STREAM)。基於UDP採用的數據報套接字(SOCK_DGRAM).
流式套接字的設計是針對面向連接的網路應用,在數據傳輸之前需要預先建立連接,在數據傳輸過程中需要維持連接,在數據傳輸結束後需要釋放連接。由於採用校驗和、確認與超時等差錯控制手段,因此流式套接字可以保證數據傳輸的正確性。
數據報套接字(SOCK_DGRAM)提供無連接的、不可靠的數據傳輸服務,實際上它是基於TCP/IP協議族中的UDP協議實現的。數據報套接字提供無序、有差錯與有重復的數據流服務。數據報套接字的設計是針對無連接的網路應用,在數據傳輸之前不需要預先建立連接。由於只採用很有限的差錯控制手段,因此數據報套接字無法保證數據傳輸的正確性。

熱點內容
翻杯子演算法 發布:2025-03-16 03:34:31 瀏覽:602
ftp後台密碼怎麼設置 發布:2025-03-16 03:33:08 瀏覽:360
阿里雲伺服器的sdk是免費的嗎 發布:2025-03-16 03:33:04 瀏覽:7
卸載linux軟體 發布:2025-03-16 03:19:07 瀏覽:808
太平天國迅雷下載ftp 發布:2025-03-16 03:13:19 瀏覽:64
伺服器硬碟溫度怎麼調節 發布:2025-03-16 03:11:47 瀏覽:74
netcore編譯前執行代碼 發布:2025-03-16 03:05:17 瀏覽:475
飢荒聯機版伺服器搭建程序 發布:2025-03-16 02:55:18 瀏覽:684
win7如何訪問共享 發布:2025-03-16 02:55:14 瀏覽:37
centosphp升級 發布:2025-03-16 02:42:04 瀏覽:52