---
title: "Datautväxling via sockets i c"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/122084-datautväxling-via-sockets-i-c"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "Nickemannen"
published: "2005-02-09T13:52:03.000Z"
updated: "2005-02-09T16:54:34.000Z"
replies: 5
views: 391
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/122084-datautväxling-via-sockets-i-c"
---

# Datautväxling via sockets i c

## #1 — Nickemannen, 2005-02-09T13:52Z

Vi skall skapa ett nätverksprotokoll för en stor olika data som skall skickas.

Vi kom och tänka på att själva nätverksprotokollet kan se ut såhär.

Vi har en flera olika structs som vi definerar på klienten och servern.

Klienten skickar en struck och en defined siffra vilket gör att mottagaren kan avgöra vilken struct det är. Det handlar om mottagarsidan typecastar det mottagna till den structen som angetts från defined siffran.

Protokollet kommer då att se ut liknande

c: Hello
s: hello_connection_established
c: sendstructtype 1
s: ok_send
c: \[Skickar struct\]
s: ok_recive_done
c: bye
s: closing_connection

Skulle detta fungera eller  hur borde det se ut?

Eftersom det är så mycket olika data som skall överföras så kan det bli jobbigt att ha ett protokoll för varje struct?

Förslag önskas?

Permalänk: https://www.webforum.nu/p/122084

## #2 — Nickemannen, 2005-02-09T14:17Z

Jag hittade denna länken:
<http://www.gamedev.net/community/forums/topic.asp?topic_id=297087>
Där dom diskuterade att det gick men att man helst inte skulle skicka hela structs utan skicka en struct med

id, length, char\[\].

Men eftersom vårat system inte skall skicka större saker än en struct med kanske en x-position och en y-position. Borde man ändå dela upp packeten :S.

Permalänk: https://www.webforum.nu/p/1549341

## #3 — Nickemannen, 2005-02-09T14:25Z

Som t.ex. här

```
struct a_msg
{
	short ID;
	unsigned short length;
	char message[BUFFERSIZE];
	int bytes_pending;
};
```

```
int SendData(a_msg * data)
	{
		//
		// Send data to the server
		//
		if(isconnected)
		{
			nRet = send(theSocket, (char *)data, HEADERSIZE+data->length, 0);
			if (nRet == SOCKET_ERROR)
			{
				//cout<<"socket error on send"<<endl;
				closesocket(theSocket);
				isconnected=false;
				return -1;
			}
			return 1;
		}
		else
		{
			//printf("not connected\n");
			return -2;
		}
	}
```

Permalänk: https://www.webforum.nu/p/1549345

## #4 — UlfT, 2005-02-09T14:36Z

> **Nickemannen skrev:**
>
> Där dom diskuterade att det gick men att man helst inte skulle skicka hela structs

Jag förstod det som att man inte ska skicka objekt:

> You should only be sending data across the wire. Not entire objects.

Det är ju naturligt, eftersom mottagaren knappast kan veta vilka medlemsfunktioner objekten har, etc.

> **Nickemannen skrev:**
>
> utan skicka en struct med
> 
> id, length, char\[\].

Id i structen skulle du kunna använda för att ange vad det är för typ av struct du skickar över. Dvs du skickar både struct och structtyp på samma gång. Om du bygger upp alla structtyper på ett sådant vis att du alltid har id i samma del av structen (i början, förslagsvis), kan du alltid läsa av id innan du vet vad det är du har tagit emot. Då har du sluppit ett steg i kommunikationen med servern.

Permalänk: https://www.webforum.nu/p/1549351

## #5 — PeW, 2005-02-09T15:02Z

> Där dom diskuterade att det gick men att man helst inte skulle skicka hela structs

En struct är detsamma som en sekvens med data precis som en array, fast med inbyggt 'offset'. Så det bör ju inte bereda några somhelst problem att skicka structs så länge client och server är ense med hur structen är definierad, eller hur?

Övriga tips (fr. avsnitt 6.3 och framåt):
<http://www.ecst.csuchico.edu/~beej/guide/net/html/advanced.html>

Permalänk: https://www.webforum.nu/p/1549364

## #6 — Nickemannen, 2005-02-09T16:54Z

Jepp, tanken var den att båda sidorna skall ha en likadan struct definerad.

Tack för länken PeW skall läsa.

Är det såhär kommunikation går till eller är det stora protokoll som byggs? Där varje liten del har sitt kommando i protokollet?

Permalänk: https://www.webforum.nu/p/1549394

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/122084-datautväxling-via-sockets-i-c
