當前位置:首頁 » 編程語言 » C語言通信庫

C語言通信庫

發布時間: 2024-11-10 05:41:02

c語言程序設計,通訊錄管理系統

/*【用C語言編寫具有數據插入、修改、刪除、顯示和查詢功能的電話薄管理程序】
1、數據包括:人名、工作單位、電話號碼和E-mail地址。
2、可對記錄中的姓名和電話號碼進行修改。
3、可增加或刪除記錄。
4、可顯示所有保存的記錄。
5、可按人名或電話號碼進行查詢。

另:採用結構體數組和文件系統實現。結構體包括人名、工作單位、電話號碼和E-mail
絕對原創,2010年7月12日晚剛寫完測試通過的,純C語言! */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define szSTR 64
#define fileDB "c:\\contact.txt"

struct CONTACT {
char name[szSTR];/*姓名*/
char unit[szSTR];/*工作單位*/
char tele[szSTR];/*電話*/
char mail[szSTR];/*mail*/
};

typedef struct CONTACT CON;

#define BNAME 1
#define BUNIT 2
#define BTELE 4
#define BMAIL 8
#define BFULL 0xFF
int OPER[5] = {BFULL, BNAME, BUNIT, BTELE, BMAIL};

void input(CON * s, int mask)
{
if(mask & BNAME) { printf("請輸入學生姓名:"); scanf("%s", s->name); }
if(mask & BUNIT) { printf("請輸入工作單位:"); scanf("%s", s->unit); }
if(mask & BTELE) { printf("請輸入聯系電話:"); scanf("%s", s->tele); }
if(mask & BMAIL) { printf("請輸入電子郵件:"); scanf("%s", s->mail); }
}/*end input*/

void show (int id, CON * s)
{
if(!s) return ;
if(id)
printf("%d\t%s\t%s\t%s\t%s\n",
id, s->name , s->unit , s->tele , s->mail );
else
printf("【姓名】%s【工作單位】%s【電話】%s【電郵】%s\n",
s->name , s->unit , s->tele , s->mail );
/*end if*/
}/*end show*/

void regist(void)
{
CON s; FILE * f = 0;
input(&s, BFULL);
f = fopen(fileDB, "ab");
fwrite(&s,sizeof(s),1,f);
fclose(f);
printf("資料已保存!\n");
}/*end regist*/

int browse(char * key, fpos_t * p, CON * s)
{
FILE * f =0; int i = 0, r = 0; CON t;
char * a = 0, * b = 0; fpos_t q;
if(!s) return 0;
f = fopen(fileDB, "rb");
if(!f) {
printf("資料庫暫無記錄\n");
return 0;
}/*end if*/
printf("編號\t姓名\t單位\t電話\t電郵\n");
printf("------------------------------------------------\n");
while(!feof(f)) {
fgetpos(f, &q);
r = fread(&t, sizeof(t), 1, f);
if(r<1)break;
if(t.name[0]==0) continue;
if(key) {
a = strstr(t.name , key);
b = strstr(t.tele , key);
if(a == 0 && b == 0) continue;
}/*end if*/
if(p) *p = q;
if(s) memcpy(s, &t, sizeof(t));
i++;
show(i, &t);
}/*end while*/
fclose(f);
printf("------------------------------------------------\n");
return i;
}/*end browse*/

fpos_t query(CON * s)
{
char key[szSTR]=""; fpos_t p = 0; int r = 0;
printf("請輸入姓名或者電話號碼:");
scanf("%s", key);
r = browse(key, &p, s);
return r?p:-1;
}/*end query*/

void clear(void)
{
FILE * f = 0; CON s;
fpos_t p = query(&s);
if(p<0) return;
f = fopen(fileDB, "rb+");
fsetpos(f, &p);
memset(&s, 0, sizeof(s));
fwrite(&s, sizeof(s),1, f);
fclose(f);
printf("記錄已刪除!\n");
}/*end clear*/

void modify(void)
{
FILE * f = 0; CON s; int cmd = 0;
fpos_t p = query(&s);
if(p<0) return;
f = fopen(fileDB, "rb+");
fsetpos(f, &p);
for(;;) {
show(0, &s);
printf("請選擇:1-姓名;2-工作單位;3-電話;4-電郵;5-保存並退出;6-放棄修改並退出\n");
scanf("%d", &cmd);
switch(cmd) {
case 1:
case 2:
case 3:
case 4:
input(&s, OPER[cmd]);
break;
case 5:
fsetpos(f, &p);
fwrite(&s, sizeof(s), 1, f);
case 6:
fclose(f);
return;
default:
printf("錯誤的操作,請重新輸入。\n");
}/*end case*/
}/*mext*/
}/*end clear*/

int main(void)
{
int cmd = 0; CON s;
for(;;) {
printf("歡迎使用通信簿!請選擇:1-添加;2-查詢;3-刪除;4-修改;5-全部輸出;0-退出\n");
scanf("%d", &cmd);
switch(cmd) {
case 0: return 0;
case 1: regist(); break;
case 2: query(&s); break;
case 3: clear(); break;
case 4: modify(); break;
case 5: browse(0, 0, &s); break;
}//end case
}
return 0;
}

linuxC編程建立TCP連接linuxctcp

Linux C編程:建立 TCP連接
Linux C編程中使用TCP(Transmission Control Protocol,傳輸控制協議)協議建立客戶端和伺服器之間連接的過程稱之為TCP連接,是一種可靠而強大的通信協議,在Linux C編程中可用於建立資料庫、網路通信等等。本文介紹了在Linux C編程中如何建立TCP連接,以及其中遇到的一些問題。
在Linux C語言編程中,可以使用socket()函數建立一個TCP連接。socket()函數的第一個參數指定協議族,例如AF_INET指定IPV4協議族,第二個參數指定套接字類型,例如SOCK_STREAM指定流式套接字。
接下來,可以使用bind()函數將套接字與系統分配的IP地址和埠綁定,然後使用listen()函數使套接字變為被動模式,並啟動監聽進程,此時伺服器已准備就緒,等待客戶端的連接。最後,使用accept()函數接受客戶端的連接,當接受到客戶端的連接後,伺服器就可以使用建立的socket與客戶端通信了。
示例代碼如下:
// 創建 socket
int sockfd;
struct sockaddr_in addr;
// AF_INET: IPV4 協議族
// SOCK_STREAM: 流式套接字
sockfd = socket(AF_INET, SOCK_STREAM, 0);
// 設置 IP 地址
addr.sin_family = AF_INET;
addr.sin_port = htons(9999); //埠號
addr.sin_addr.s_addr = inet_addr(“127.0.0.1”); //IP地址
// 綁定 IP 和 埠
bind(sockfd, (struct sockaddr*)&addr, sizeof(addr));
// 監聽客戶端請求
listen(sockfd, 20);
// 接受 客戶端連接請求
struct sockaddr_in client_addr;
socklen_t client_addr_len;
int client_fd = accept(sockfd, (struct sockaddr*)&client_addr,
&client_addr_len);
上述步驟完成後,客戶端和伺服器的TCP連接建立完畢。在Linux C編程中,使用TCP協議建立客戶端和伺服器之間連接過程雖然繁瑣,但是它可以實現可靠的數據傳輸和優秀的網路通信,這個代價值得支付。
總而言之,在Linux C編程中使用TCP協議建立客戶端和伺服器之間連接,可以通過socket()、bind()、listen()、accept()等函數將客戶端和伺服器建立可靠的數據傳輸連接,這是一個蠻耗時的過程,但也值得支付,因為通過這種方式可以實現穩定的網路通信。

❸ 為什麼還要用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();
}
}

❹ 在windows下用C語言如何實現socket網路編程,需要用到哪些頭文件或者庫

需要用到的頭文件包含:

#include <winsock2.h>

#include <windows.h>

與Linux環境下socket編程相比,windows環境多了一個步驟:啟動或者初始化winsock庫

Winsock,一種標准API,一種網路編程介面,用於兩個或多個應用程序(或進程)之間通過網路進行數據通信。具有兩個版本:

Winsock 1:

Windows CE平台支持。

頭文件:WinSock.h

庫:wsock32.lib

Winsock 2:

部分平台如Windows CE貌似不支持。通過前綴WSA可以區別於Winsock 1版本。個別函數如WSAStartup、WSACleanup、WSARecvEx、WSAGetLastError都屬於Winsock 1.1規范的函數;

頭文件:WinSock2.h

庫:ws2_32.lib

mswsock.h用於編程擴展,使用時必須鏈接mswsock.dll

(4)C語言通信庫擴展閱讀

winsock庫的載入與卸載:

載入:int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);

載入成功,返回值為0。

WORD wVersionRequested:載入的winsock版本,使用宏MAKEWORD(x, y),x表示高位元組,y表示低位元組。然而使用時MAKEWORD(2, 2)。高位元組與低位元組相同~~

LPWSADATA lpWSAData:WSADATA結構的指針,傳入參數後,系統幫助我們填充版本信息。有興趣的可以看看結構體內容,不過基本用不著。

卸載:int WSACleanup(void);比起載入,卸載的函數真是輕松愉快。

熱點內容
低配捷達能升級哪些配置 發布:2024-11-22 19:59:54 瀏覽:255
小溪流水聲解壓 發布:2024-11-22 19:59:03 瀏覽:627
datepickerandroid 發布:2024-11-22 19:54:31 瀏覽:655
方舟編譯器與虛擬機 發布:2024-11-22 19:44:15 瀏覽:141
nas存儲應用場景 發布:2024-11-22 19:17:07 瀏覽:976
美年大健康體檢查詢密碼是什麼 發布:2024-11-22 19:14:49 瀏覽:747
wps存儲找不到了 發布:2024-11-22 19:09:21 瀏覽:524
蘋果訪問報告 發布:2024-11-22 19:06:03 瀏覽:658
區域網訪問虛擬主機 發布:2024-11-22 19:01:05 瀏覽:517
安卓怎麼玩英雄聯盟手游最後有個圖片 發布:2024-11-22 18:55:58 瀏覽:749